MacでPython環境を作る時に気をつける事

More than 5 years have passed since last update.

マシンを交換したので久しぶりにPython環境を構築してたら色々つまずいたのでメモ。


参考ページ

http://d.hatena.ne.jp/nakamura001/20111129/1322579170

http://www.sicafe.net/macPackageManageTips/html/homebrewPythonInstall.html

http://yono.hatenablog.jp/entry/20100923/1285235346

http://mzmttks.blogspot.jp/2011/12/python-site-packagesdist-packages.html

http://hello-hello-world.blogspot.jp/2011/09/pythonsite-packages.html

Macには標準でPythonがインストールされています。

しかし、開発環境を構築する時には標準の環境を汚したくなかったり、別のバージョンのPythonが必要だったりするので別にインストールする事も多いのです。

しかし、中途半端なセットアップを行うとライブラリのインストールで意図しないうちにライブラリのインストール先が混じってしまい、インストールしたはずのパッケージが行方不明なんて事になったりします。

easy_install は元から入っている

/usr/bin/easy_install

にあるけど pip は公式インストーラーから入れたので

/usr/local/bin/pip

だったりするわけです。さらにPythonが /opt 以下だったりするとさらにカオス。

例えば標準の python の site_packages は以下になりますが

/Library/Python/2.7/site-packages

MacPortsでインストールした python だと以下になります。

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

まぁ基本的に virtualenv 内のみで使ってれば問題は出ないんですが。


MacPortsでインストールしたPythonを標準にする

ここらへんはpython特有の歴史的な問題も絡むので細かい話は置いておいて、MacPortsを使ってPython用の環境を作る場合です。



  1. まずはpython本体

    $ sudo port install python27
    



  2. 次にeasy_install。なぜかsetuptoolsの方はselectに対応してないので easy_install はインストール先のpythonに合わせて easy_install-2.7 みたいなコマンドを使います。

    $ sudo port install py27-setuptools
    

    ここでエラーになる場合エラーログにも出てきますが以下のコマンドで直ります。ちなみに私の場合は公式のget_pip.pyをportでいれたpythonで実行後の環境だと発生しました。

    sudo port -f activate py27-distribute
    



  3. 次に pip もportで入れます。select で標準の pip を切り替え。

    $ sudo port install py27-pip
    
    $ sudo port select --set pip pip27



  4. virtualenv関係。

    $ sudo port install py27-virtualenv py27-virtualenvwrapper
    
    $ sudo port select --set virtualenv virtualenv27
    $ echo -e "\n# virtualenv\nexport WORKON_HOME=\$HOME/.virtualenvs\nsource `which virtualenvwrapper.sh-2.7`\n" >> ~/.bashrc

    virtualenvはselectで切り替えを。virtualenvwrapperはselect無いので注意。




パスの調べ方

python の参照しているパスを調べる方法

python -c "import site; print(site.getsitepackages())"

distributeの参照先

python -c "import distutils.sysconfig as s; print(s.get_python_lib())"