Apr 20 2014

Mac に Python 3.x 系と 2.x を共存するベストな方法

Version : OS X 10.9.2, Python 2.7.6, Python 3.4.0
PhotoFunia-29055d1

 ここ数年大人気の Python ですが、現在最新版の 3.x 系とは別に前のバージョンである 2.x 系もいまだ根強く使われ続けています。新しいバージョンだけ入れればよいというほど単純なものでもないようです。今でも 2.x 系を前提としたレンタルサーバやミドルウェアが数多くあるのでできれば両方インストールして使い分けるのが幸せなんじゃないでしょうか。
 今回は Mac に Python の 2.x 系と 3.x 系の両方をインストールする方法をいくつか試してみて、辿り着いたベスト(だと思う)な手順をご紹介します。


Pocket

やりたいことは次の通り。

  1. Python 2.x 系と 3.x 系を同時にインストール
  2. 双方のバージョンが互いに干渉せず独立してインストールされること
  3. 簡単にバージョンが切り替えられること
  4. パッケージのインストールやバージョン管理のメンテが簡単なこと
  5. 追加パッケージ numpy, scipy, scikit-learn, matplotlib を入れたい

Mac OS X 10.9 には最初から Python 2.7.5 が入っています。ですが、最新版は現時点で 2.7.6 なので今回両方とも新たに入れなおすことにします。

 

ググるといろいろと情報が出てきますが、いろいろなページを見ながら試行錯誤したので後日また困らないように一気通貫でまとめておこうと思います。いろいろ試しましたが次の手順を踏むのがベストな方法だと思います。
なお、パッケージ管理システムの homebrew が入っていること前提です。入っていない場合は homebrew のインストール方法はググるとたくさん出てくるのでそちらを参考に。

  1. homebrew で pyenv をインストールする
  2. homebrew で pyenv-virtualenv をインストールする
  3. pyenv で python 2.x をインストールする
  4. pyenv で python 3.x をインストールする
  5. pip で 必要なパッケージをインストール
  6. ちょっとハマるので回避手順を踏む

主に参考にさせていただいたページはこちらです。

http://blog.i97506051502.com/entry/2014/03/25/PythoninMacOSX
Python in Mac OS X – 限りなくクラウドに近いオンプレミス

 

上記手順の 1〜4 までは上記「限りなくクラウドに近いオンプレミス」さんのページにすべて丁寧に解説されています。ですので、敢えて同じことを引用するのもはばかられますので上記サイトを参考にして行った手順だけそのまま書くに留めておきます。詳しくはオンプレミスさんを参考にしてください。

 

新しいバージョンの python をインストールしたい場合には、brew と pyenv 自体を最新版にする必要があります。pyenv install でエラーが出るときは次を試してください。

1. brew update
2. brew upgrade pyenv
3. brew upgrade pyenv-virtualenv
4. pyenv install [新バージョン]

 

がつっと python 全体のバージョンを切り替えたいときは

のようにすれば OK。

 

特定のフォルダ以下にいるときだけバージョンを指定したい場合には、そのフォルダに移動した状態で

のようにすれば OK。2.x でしか動かないプログラムと 3.x でしか動かないプログラムはフォルダを分けて保存して、それぞれのフォルダで pyenv local しておけばよいということ。自動でやってくれるので超便利。

 

数値計算用の numpy, scipy とグラフ描画用の matplotlib と 機械学習用の scikit-learn パッケージをインストールしましたが、ここはちょっとハマった部分もあったのでちゃんとメモしておきます。

pyenv でバージョンを切り替えて置いてからインストールすることで 2.x, 3.x 両方に入れることができます。

numpy は nose というパッケージを必要としますので先に nose を入れておきます。

 

scipy には FORTRAN のコンパイラが必要なようです。事前に brew で gFortran を入れておきます。

 

グラフ描画用の matplotlib は freetype に依存しているため、freetype を先に brew でインストールします。

 

もしも pip で freetype の include ファイルが見つからないというエラーがでた場合、include ファイルにパスを通してから再度 pip を行います。

 

これでとりあえずインストールは成功すると思うのですが、もう一つ問題が残っています。

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 に次の一行を追加する

 

 

scikit-learn だけは python 3.4.0 の方でうまくインストールできていません。エラーが出てしまうのですがまだ対処法を見つけられていません、、、もうちょっと調べてみます。といいつつ、メインは 2.7.6 を使うことになりそうなのでしばらく放置の可能性大ですが…。

 

Pocket

コメントを残す