Mac に Python 3.x 系と 2.x を共存するベストな方法
やりたいこと
やりたいことは次の通り。
- Python 2.x 系と 3.x 系を同時にインストール
- 双方のバージョンが互いに干渉せず独立してインストールされること
- 簡単にバージョンが切り替えられること
- パッケージのインストールやバージョン管理のメンテが簡単なこと
- 追加パッケージ numpy, scipy, scikit-learn, matplotlib を入れたい
Mac OS X 10.9 には最初から Python 2.7.5 が入っています。ですが、最新版は現時点で 2.7.6 なので今回両方とも新たに入れなおすことにします。
手順概要
ググるといろいろと情報が出てきますが、いろいろなページを見ながら試行錯誤したので後日また困らないように一気通貫でまとめておこうと思います。いろいろ試しましたが次の手順を踏むのがベストな方法だと思います。
なお、パッケージ管理システムの homebrew が入っていること前提です。入っていない場合は homebrew のインストール方法はググるとたくさん出てくるのでそちらを参考に。
- homebrew で pyenv をインストールする
- homebrew で pyenv-virtualenv をインストールする
- pyenv で python 2.x をインストールする
- pyenv で python 3.x をインストールする
- pip で 必要なパッケージをインストール
- ちょっとハマるので回避手順を踏む
主に参考にさせていただいたページはこちらです。
Python in Mac OS X – 限りなくクラウドに近いオンプレミス
手順 1〜4
上記手順の 1〜4 までは上記「限りなくクラウドに近いオンプレミス」さんのページにすべて丁寧に解説されています。ですので、敢えて同じことを引用するのもはばかられますので上記サイトを参考にして行った手順だけそのまま書くに留めておきます。詳しくはオンプレミスさんを参考にしてください。
1 |
brew install pyenv |
1 |
brew install pyenv-virtualenv |
1 |
pyenv install 2.7.6 |
1 |
pyenv install 3.4.0 |
バージョン切り替え方法
がつっと python 全体のバージョンを切り替えたいときは
1 |
pyenv global 2.7.6 |
のようにすれば OK。
特定のフォルダ以下にいるときだけバージョンを指定したい場合には、そのフォルダに移動した状態で
1 |
pyenv local 2.7.6 |
のようにすれば OK。2.x でしか動かないプログラムと 3.x でしか動かないプログラムはフォルダを分けて保存して、それぞれのフォルダで pyenv local しておけばよいということ。自動でやってくれるので超便利。
手順 5〜6 : pip によるパッケージのインストール
数値計算用の numpy, scipy とグラフ描画用の matplotlib と 機械学習用の scikit-learn パッケージをインストールしましたが、ここはちょっとハマった部分もあったのでちゃんとメモしておきます。
pyenv でバージョンを切り替えて置いてからインストールすることで 2.x, 3.x 両方に入れることができます。
numpy
numpy は nose というパッケージを必要としますので先に nose を入れておきます。
1 2 |
pip install nose pip install numpy |
scipy
scipy には FORTRAN のコンパイラが必要なようです。事前に brew で gFortran を入れておきます。
1 2 |
brew install gfortran pip install scipy |
matplotlib
グラフ描画用の matplotlib は freetype に依存しているため、freetype を先に brew でインストールします。
1 2 |
brew install freetype pip install matplotlib |
もしも pip で freetype の include ファイルが見つからないというエラーがでた場合、include ファイルにパスを通してから再度 pip を行います。
1 2 |
sudo ln -s /usr/local/include/freetype2 /usr/include/freetype pip install matplotlib |
これでとりあえずインストールは成功すると思うのですが、もう一つ問題が残っています。
python を起動して、import pylab としたときに下記のエラーが出ると思います。
untimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends.
理由はもろもろあるようですが、手っ取り早い回避方法は次のファイル(なければ作る)に設定を書いて別のバックエンドを指定する方法です。
~/.matplotlib/matplotlibrc に次の一行を追加する
1 |
backend : TkAgg |
scikit-learn
1 |
pip install scikit-learn |