有償であるMatlabが提供する実験環境を、無償でPython+numpy+schipy+matplolib+OpenCVで構築する方法を調べている。ひとまずLinux (Ubuntu/Linux Mint) でのPython環境の構築方法が分かってきたので、Mac上でも似たような環境を構築してみる。おことわりとして、homebrewがインストール済みであるとする。Mac OSXでは初期状態で/usr/local/bin/pythonがインストールされているが、これは使わない。homebrewでインストールする各バージョンのpythonを利用して、バージョンごとのコードを開発するための仮想環境をそれぞれ作成する。仮想環境の作成にはvirtualenvを利用する。pyenvの方がお手軽らしいが、それはそれで・・・。今回は2.7.5と3.3.2のふたつのバージョンに対してそれぞれの開発環境を構築する。
$ brew update $ brew upgrade $ brew install gfortran %% scipyのインストールに必要 $ brew install pkg-config %% matplotlibのインストールに必要 $ brew install python $ brew install python3 $ sudo easy_install pip $ sudo pip install virtualenv $ sudo pip install virtualenvwrapper $ virtualenv --python=/usr/local/Cellar/python/2.7.5/bin/python2 workspaceP2 $ virtualenv --python=/usr/local/Cellar/python3/3.3.2/bin/python3 workspaceP3
homebrewでインストールするのはpythonだけで、あとはpython用のパッケージマネージャであるpipを利用する。仮想環境を利用するには、作成したディレクトリ(workspaceP2あるいはworkspaceP3)に入り
$ source bin/activate
とする。仮想環境を利用している間はpythonあるいはpipとすれば仮想環境ごとのバージョンがコールされる。この方法でpythonを利用するので、環境変数を書き換える必要もない。仮想環境の利用を終了するには
$ deactivate
とする。
つぎに、各仮想環境に必要なライブラリ等をインストールする。
$ cd ./workspaceP2/ $ source bin/activate $ pip install numpy %% 数値計算用のコンテナを提供 $ pip install scipy %% 計算科学用ライブラリ $ pip install matplotlib %% プロッター $ pip install ipython %% pythonのインタラクティブ拡張 $ pip install sphinx %% $ pip install rope %% エディタ用プラグイン $ pip install pyflakes %% リアルタイムコード解析 $ pip install pylint %% コード解析チェッカ $ pip install pep8 %% 構文スタイルチェッカ $ pip install psutil %% メモリ/CPU使用率の表示
ところが、numpyインストール後に
InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. ....
というwarningが。これを回避するために
$ pip install requests requests[security]
とする。
エディタとしてSublime text3を入れるのもよいし、EclipseっぽいPycharmを使うのもよし。Matlabになれているならば、Matlabライクな環境を提供するSpyderが良さげ。各仮想環境に総合開発環境(IDE)としてSpyderをいれるのなら、以下。
$ pip install spyder
Spyderは先ほどインストールしたライブラリ全てに依存していることに注意。さらに、SpyderのGUI部分はPyQt4(あるいは代用としてPysideも可)に依存しているので、これもインストールする必要がある。pipではインストールできないので、まずはグローバル環境にPython2.x/3.xの両方で利用できるようにオプションを付けてインストール。
$ brew install pyqt --with-python3
このときSIPも一緒にインストールされる。次に、各仮想環境のディレクトリにシンボリックリンクを作成する。
$ cd /workspaceP2/lib/python2.7/site-packages $ ln -s /usr/local/lib/python2.7/site-packages/sip.so ./ $ ln -s /usr/local/lib/python2.7/site-packages/sipconfig.py ./ $ ln -s /usr/local/lib/python2.7/site-packages/sipdistutils.py ./ $ ln -s /usr/local/lib/python2.7/site-packages/PyQt4 ./ $ cd ../ $ ln -s /usr/local/lib/python3.4/site-packages/sip.so ./ $ ln -s /usr/local/lib/python3.4/site-packages/sipconfig.py ./ $ ln -s /usr/local/lib/python3.4/site-packages/sipdistutils.py ./ $ ln -s /usr/local/lib/python3.4/site-packages/PyQt4 ./
Pythonの各バージョンに適したSpyderを起動するには、仮想環境をactivateした上で
$ spyder
とすればよい。
Spyderのvirtualenvとあわせた利用方法を日本語で検索したところ、併用を諦めたとかいう記事をちらほらみかけた。英語で検索すれば簡単に欲しい情報がヒットしたので、大学卒業程度の技術者ならすぐに解決できそうなものだが・・・Spyder自体はpipでインストールできたので、PyQt4とvirtualenvとの併用について調べたら一発だった。日本語での記事もある。うちの研究室の学生も、いい加減日本語のみの検索から一歩踏み出した方がよいと思う。
ついでに、OpenCVをインストールしてPythonから使えるようにする。まず、homebrewでOpenCVをインストールする。つぎに、仮想環境のディレクトリにシンボリックリングを作成。バージョンは2.4.xなので、Python3には対応していない。
$ brew install opencv --with-ffmpeg --with-jasper --with-libdc1394 --with-opengl --with-qt --with-tbb --with-ximea $ cd ./worspaceP2/lib/python2.7/site-packages/ $ ln -s /usr/local/Cellar/opencv/2.4.12/lib/python2.7/site-packages/cv.py cv.py $ ln -s /usr/local/Cellar/opencv/2.4.12/lib/python2.7/site-packages/cv2.so cv2.so.
ちゃんと動くか確認しておわりんこ。
$ cd ~/python/workspaceP2 $ source bin/activate $ python >> import cv >> import cv2 >> exit()
エラーが起きなければおk。
Spyderを使いこなすか決めかねているので、Sublime text3も入れておく。インストールにあたり、homebrewを拡張するhomebrew caskをインストールし、cask経由でSublime text3を入れる。
$ brew install caskroom/cask/brew-cask $ brew tap caskroom/homebrew-versions $ brew cask install sublime-text3
下記コマンドで起動して、初期設定を行う。
$ subl
Preference => Setting-Userを選択して、設定を変更。
{ //"color_scheme":"Packages/Color Scheme- Default/Twilight.tmTheme", "draw_white_space": "all", "font_face": "Dejavu Sans Mono", "font_size": 14, "highlight_line": true, "show_encoding": true, "show_line_endings": true, "translate_tabs_to_spaces": true, "tab_size": 4, "indent_guide_options":["draw_normal", "draw_active"], }
Python規約PEP8だとTABの使用は推奨されていないため、pep8コマンドで構文チェックをかけると怒られる。そこで、TABをスペース数文字分にあらかじめ設定しておく。つぎに、Sublime text用のパッケージを管理するパッケージマネージャをいれる。View => Show Consoleを選択し、ここ(https://packagecontrol.io/installation)に書いてある内容をコピペする。
以下、参考にしました。
- OpenCV3をvirtualenvのPython3にHomebrewでインストールしたかったけど妥協してソースからビルド
- Spyder 2.3 documenation
- Mac OSX dePyQt4 の開発環境を整える