WindowsでPython
-
Upload
drillan -
Category
Technology
-
view
520 -
download
0
Transcript of WindowsでPython
WindowsでPythonみんなのPython勉強会#22
2017/03/08driller@patraqushe
自己紹介
○ driller / どりらん @patraqushe○ - 2010: コンピュータの会社に勤務○ 2010 -: 個人トレーダー○ 2015 -: Pythonをはじめる
fin-pyの紹介
Python + 金融のコミュニティです
毎月もくもく会をやってます
金融について詳しくない方でも興味が
あるかた大歓迎です
次回は3/26(日)11:00- です
お申込みは今すぐ!
https://connpass.com/event/52667
注意事項(重要)
○ 複数の環境構築方法ついて説明しますが、優劣をつける意図は全くありません
○ #stapy のハッシュタグで、特定のOSやパッケージ等についてネガティブなツイートをしようようにしてください
宗派が違ってもお互いを尊重して仲良くしましょう
ケンカはダメ。ゼッタイ。
Agenda
1. Windows + Pythonの状況2. 環境構築について3. 仮想環境について4. おまけ
Windowsを取り巻く昨今の状況
おもいでぽろぽろ
一昔前のWindows+Python環境
○ Pythonのイベントに行けば、みんな当たり前のようにMacBook
○ Linuxでしか動かないパッケージ○ Linuxの情報しかない
Windowsユーザが増えてきた?
○ IT以外の職種● 科学技術● 統計、マーケティング● 金融
○ 機械学習ブーム○ Pythonブーム
Windowsを使う理由
○ 以前からWindowsユーザ○ 職場がWindows
● 非IT系が多い
○ H/Wの選択肢を広げる● ( ゚∀゚)o彡° Ryzen!Ryzen!
○ Windowsソフト、win32api
Windowsが避けられていた理由
なぜITエンジニアからは敬遠されるのか
文字コード
○ CP932○ 1982年の規格
● 35年前!
○ 文字化けとの長い戦い・・・
コンソール(ターミナル)環境
○ コマンドプロンプトが主流だった○ コンソール上でエディタが使いづらい○ スクリプト処理でできることが限られている○ MS-DOS時代(1981年)から殆ど進化していない
Pythonパッケージの対応
○ Windowsが後回しにされるケースが多い○ Windows用にビルドされたwheelがない○ ビルドが大変
● scipy, lxml, mecab, opencv
Windows環境の改善
やればできる子?
Python3.6でのWindows対応
○ PEP529: ファイルシステムエンコーディングがUTF-8に○ PEP528: コンソールエンコーディングがUTF-8に○ ロングパス対応
● 260文字制限がなくなった
コンソールエンコーディングを試す
下記のコマンドを実行してみましょう
python -c "print('€')"
もしくはpythonを実行して
>>> print('€')
PowerShell
○ 130個以上の標準的なコマンドラインツール○ 管理タスクに重点を置いた新しいスクリプト言語○ 一貫性のある構文とユーティリティ○ エイリアスによるUNIXコマンドとの共通化
コンソール
サードパーティのソフトの機能がそれなりに充実
○ ConEmu○ Cmder○ etc
仮想環境
○ virtualenvwrapper-winはコマンドプロンプトしか使えなかった● Python2ではvirtualenvwrapper-powershellをインストールすると
PowerShellが使える● virtualenvwrapper-powershellは少しめんどくさい
○ venvでPowerShellが使えるように● Pythonの標準として使える
ビルドが必要なパッケージ
○ Visual C++ 2015 Build Tools● Visual Studioのインストールが不要に
○ 非公式バイナリ● http://www.lfd.uci.edu/~gohlke/pythonlibs/
○ ANACONDA
Docker for Windows
○ VirtualBox、Gitのインストールが不要に● インストールが楽になった
○ PowerShell対応
Bash on Ubuntu on Windows
○ WindowsでBash(Ubuntu)が使えるように○ Pythonも動作○ オーバヘッドなしにLinuxのバイナリが動作○ ベータ版で発展途上だが着々と改善している
Windowsでも
Pythonが使えるようになってきた
環境構築の重要性
人はなぜ環境構築の話になると熱くなるのか?
本当にあった怖い話
○ 会社員時代に仕様書に従って三日三晩かけてシステムを構築
○ 32bitのOSじゃないとアプリケーションが動かないことが判明
○ OSから全部入れ直し・・・
環境構築を甘く見ていると・・・
○ プラットフォームの選択を誤ると、そもそもやりたかったことができなくなる
○ 壊れたときにやり直しが大変になる○ 変更をした影響で既存のプログラムが動かなくなる
WindowsにおけるPythonの選択肢
意外と色々ある
WindowsにおけるPythonの選択肢
○ 公式のPython○ ディストリビューション
● 公式● ANACONDA● Intel® Distribution for Python*● etc
その他の選択肢
○ VM● VirutualBox, VMWare
○ Docker● Docker for Windows● Doker Toolbox
○ Cygwin, MSYS, MSYS2○ Bash on Ubuntu on Windows
公式配布のPython
○ python.orgから配布されているPython○ 公式なので色々と安心
● 情報が充実● 事例が豊富
○ 最新版のリリースが一番早い○ vanilla Pythonとも呼ばれるらしい
32bit or 64bit
○ 32bitにする理由● OSが32bit● win32APIを呼び出す● C拡張を32bitでビルドして配布する
○ 上記以外の理由がなければ64bitでよさそう○ 両方入れるという選択肢も
ANACONDA
○ Continuum Analytics社が提供しているPythonのディストリビューション
○ データ分析等によく使われる多数のパッケージがプリインストール
○ パッケージ管理が独自仕様○ 最小構成で入れる場合はMinicondaを選択
公式配布のPython or ANACONDA
○ きのこたけのこ戦争並の論争に○ それぞれに利点と欠点があるので、それを踏まえた選択
を○ 両方入れるという選択肢も
ANACONDA
利点
○ 必要そうなパッケージ
が大抵入ってる
○ すぐにはじめられる
○ パッケージがビルド済
み
欠点
○ パッケージが独自仕様
○ 最新版とのラグ
○ 問題が会った場合のト
ラブルシュートが困難
Intel® Distribution for Python*
○ 様々な点で高速化されている● MKL: Numpy, Scipy, scikit-learn● Threading Building Blocksライブラリ● JITコンパイル(Numba)● CythonとMPIライブラリを使用したmpi4pyの高速化● pyDAALを介したデータ解析アクセラレーションライブラリ
○ pip, condaを使用したパッケージ管理が可能○ 最新のPythonがビルドされるまでのラグがある
● 2017年02月時点ではPython3.5
その他のディストリビューション
○ Enthought Canopy● scipy.orgのスポンサー
○ Python(x,y)● 2系のみ、開発終了?
○ WinPython● ポータブル● バージョンが古い
複数のPythonを入れる場合のTips
○ インストール時にPathを設定しないようにする● システムで使いたいPythonだけ設定する
○ Pathを切り替える方法を用意する● コマンドプロンプト
■ バッチファイル■ doskey
● PowerShell■ スクリプト■ Set-Alias
PATHの通し方(コマンドプロンプト)
例: "C:\Python36"にpython.exeがある場合
○ 既存のPATHを含める
PATH=C:\Python36;C:\Python36\Scripts
○ 既存のPATHを含めない
PATH=C:\Python36;C:\Python36\Scripts;%PATH%
PATHの通し方(PowerShell)
例: "C:\Python36"にpython.exeがある場合
○ 既存のPATHを含める$Env:Path = "C:\Python36;C:\Python36\Scripts;" + $Env:Path
○ 既存のPATHを含めない$Env:Path = "C:\Python36;C:\Python36\Scripts"
環境を切り替えるコマンドを登録
Windows PowerShell プロファイルを作成して編集
New-item –type file –force $profile notepad $profile
Set-AliasでPATHを通すコマンドを登録しておく
Demo
コマンド一発でPython環境を切り替え
○ Python3.6(64bit)○ Python3.6(32bit)○ Python2.7(32bit)○ ANACONDA Python3.6(64bit)○ ANACONDA Python3.6(32bit)○ Intel® Distribution for Python*
Bash on Ubuntu on Windows
○ Windows Subsystem for Linux(WSL)上で動作するUbuntu
○ 14.04LTS→Build 14943以降から16.04LTSに○ PythonはUbuntuと同じ方法でインストール
● apt-get● ソースからビルド● pyenv
○ 大抵のパッケージは動作● GUI系は少し工夫が必要
仮想マシン、コンテナ
Linuxの環境と合わせることができる
○ 仮想マシン● VMWare● VirtualBox● Vagrant
○ コンテナ● Docker for Windows● Docker Toolbox
なぜわざわざLinux環境にするのか
○ 殆どのパッケージが動作○ 豊富な事例、ノウハウ○ シェルスクリプト○ 文字コード○ 高い互換性
● manylinux wheel
Demo
○ 数多の挑戦者を退けてきたmecabを試す● Bash on Ubuntu on Windows● Docker for Windows
自分に合ったものを入れよう
仮想環境のすゝめ
最強のリスクヘッジ
なぜ仮想環境を使うのか?
○ スクラップアンドビルドが容易○ 変更が全体に影響を及ぼさない○ 複数のバージョンを扱える○ 必要最小限の環境をつくれる
スクラップアンドビルド
○ 変更を加えるとおかしくなることがある● パッケージ、拡張機能のインストール● 環境変数の変更
○ 場合によっては再インストールが必要に○ 仮想環境にしておけば、削除して作り直しが簡単にできる
変更に対する影響
○ PATHの上書き○ アップデートしたパッケージの変更○ Python自体のバージョン変更の影響
複数のバージョン
○ Pythonのバージョンを複数に○ パッケージのバージョンを複数に○ PATHを自動で設定できる
最小環境
○ 単体でテストができる● 依存パッケージの確認● パッケージの配布
○ 問題の切り分けが容易
Windows + Pythonの仮想環境
virtualenv venv conda env
virtualenv
○ Python2の仮想環境の主流○ virtualenvwrapperと組み合わせることで利便性が向上○ Windowsではコマンドプロンプトのみ対応
● PowerShellは一部対応
venv
○ Python3.3から標準ライブラリとして使用可能○ PowerShellに対応○ 任意のディレクトリに仮想環境を作成できる
venv超入門
○ 仮想環境の作成<python-path> -m venv <envname>
○ 仮想環境に切り替え<envdir>\Scripts\Activate.ps1コマンドプロンプトの場合はActivate.bat
○ 仮想環境から抜けるdeactivate
ANACONDAの仮想環境(conda env)
○ ANACONDA独自の仮想環境○ 複数バージョンのPythonを構築できる○ PowerShellで使う場合はPSCondaEnvsのActivateスクリ
プトを使用する● https://github.com/Liquidmantis/PSCondaEnvs
conda env超入門
○ 仮想環境の作成conda create -n <envname> python=<python-version>
○ 仮想環境に切り替えactivate <envname>
○ 仮想環境から抜けるdeactivate.ps1コマンドプロンプトの場合はdeactivate.bat
Demo
○ venvによる仮想環境の切り替え○ conda envによる仮想環境の切り替え
仮想環境からはじめよう
おまけ
ベンチマーク
動作環境(プラットフォーム)Host OS Guest OS Python
Windows-10-10.0.15025-SP0(build15025.1000)
Python3.6.0 64bit
Python3.6.0 32bit
ANACONDA Python3.6.0 64bit
ANACONDA Python3.6.0 32bit
Intel® Distribution for Python*3.5(Version 2017 (Update 2))
Linux-4.4.0-43-Microsoft-x86_64-with-Ubuntu-16.04-xenial
Python3.6.0 (BoW)
Linux-4.9.8-moby-x86_64-with-debian-8.7
Python3.6.0 (Docker for Windows 10072)
ArchLinux Python3.6.0
プログラム
○ コードはPure Python○ 与えられた自然数(今回は100,000,000)から
素数を探索するアルゴリズム● https://github.com/famzah/langs-performance
○ 計測はBenchmarkerを使用● 5回施行し、最大値と最小値を除く3回の実行時間の平
均値
ベンチマーク結果
※ Arch Linuxは同一のH/Wで実施(参考値)
ベンチマークについて
○ 懸念されていたBoWのオーバヘッドはなかった● むしろ他より速かった
○ 個別パッケージのベンチマークをしたほうがよさそう● Numpy, scipy, 機械学習系, 画像処理系
○ パッケージのビルド方法によって差が出る可能性も
速度が気になる人は測ってみよう
まとめ
○ WindowsでもPythonできる○ 自分に合った環境構築を○ 仮想環境を活用しよう○ 速度が気になる人は比べてみよう