■
brew update したら以下のように distribute と pip がなくなって、python が更新された。
適当に検索したら https://github.com/mxcl/homebrew/wiki/Homebrew-and-Python というドキュメントが見つかった。いままで easy_install とか pip でパッケージを入れると、$HOMEBREW を homebrew を入れたディレクトリとして、$HOMEBREW/Cellar/python/2.7.1/lib/python2.7/site-packages とか $HOMEBREW/Cellar/python/2.7.1/bin に入っていたけど、python のバージョンが変更される(2.7.1 から 2.7.2 に上がるとか)たびに入れなおしたり、シンボリックリンクしなおしたりする必要があるので、これからは $HOMEBREW/Cellar/python/{SOME_VERSION}/lib/python2.7/site-packages は $HOMEBREW/lib/python2.7/site-packages へのシンボリックリンクにして、$HOMEBREW/Cellar/python/{SOME_VERSION}/bin に入るものは $HOMEBREW/share/python に入れる、らしい。で、最後に「distribute と pip の Formula はなくなったけど、brew で python を入れると easy_install は入るから easy_install pip すれば pip も使えるョ!」みたいなことが書いてある。
というわけで、python の環境を作りなおした。
前の環境を消す
brew で入れたものを uninstall して、cleanup でリンク切れ?したシンボリックリンクを消したり空のディレクトリを消したりしておく。
$ brew uninstall pip distribute python $ brew cleanup
一応 virtualenv も作りなおすことにしたので、消しておく。
$ rm -rf ~/.virtualenvs/*
基本環境を作る
$ brew install python ==> Downloading http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tar.bz2 ######################################################################## 100.0% ==> ./configure --prefix=/Users/nulll/homebrew/Cellar/python/2.7.1 --enable-shared ==> make ==> make install ==> Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.15.tar.gz ######################################################################## 100.0% ==> /Users/nulll/homebrew/Cellar/python/2.7.1/bin/python setup.py install ==> Caveats A "distutils.cfg" has been written, specifing the install-scripts folder as: /Users/nulll/homebrew/share/python If you install Python packages via "python setup.py install", easy_install, pip, any provided scripts will go into the install-scripts folder above, so you may want to add it to your PATH. Distribute has been installed, so easy_install is available. To update distribute itself outside of Homebrew: $ easy_install pip $ pip install --upgrade distribute See: https://github.com/mxcl/homebrew/wiki/Homebrew-and-Python ==> Summary /Users/nulll/homebrew/Cellar/python/2.7.1: 4768 files, 82M, built in 3.3 minutes
distribute も一緒に入ったけど、このままだと使えないので $HOMEBREW/bin からシンボリックリンクする。以下、$HOMEBREW を ~/homebrew とする。
$ cd ~/homebrew/bin $ ln -s ../share/python/easy_install ./
easy_install で pip を入れて、シンボリックリンクする。
$ easy_install pip $ cd ~/homebrew/bin $ ln -s ../share/python/pip ./
pip で mercurial を入れて、シンボリックリンクする。
$ pip install mercurial $ cd ~/homebrew/bin $ ln -s ../share/python/hg ./
pip で virtualenvwrapper を入れる。virtualenv も入るので、シンボリックリンクする(virtualenvwrapper が中で使う)。
$ pip install virtualenvwrapper $ cd ~/homebrew/bin $ ln -s ../share/python/virtualenv ./
.zshrc を修正する。
... export HOMEBREW=$HOME/homebrew ... export WORKON_HOME=$HOME/.virtualenvs if [ -f $HOMEBREW/share/python/virtualenvwrapper.sh ]; then source $HOMEBREW/share/python/virtualenvwrapper.sh fi ...
virtualenv を作って、numpy と scipy を入れる
下準備
numpy と scipy を使うための virtualenv を作る。
$ mkvirtualenv work --no-site-packages --distribute
virtualenv 切り替え。以下、$ の左側の括弧で、現在の virtualenv を表わす。
$ workon work (work)$
後で numpy と scipy のテストを走らせるために pip で nose を入れる。
(work)$ pip install nose
numpy を入れる
brew で gfortran を入れる。
(work)$ brew install gfortran
pip で numpy を入れる。
(work)$ pip install numpy
どんな感じで build されたか show_config で見つつ、まともに動くか test する。
(work)$ python Python 2.7.1 (r271:86832, Mar 30 2011, 22:36:37) [GCC 4.2.1 (Apple Inc. build 5664)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import numpy >>> numpy.show_config() lapack_opt_info: extra_link_args = ['-Wl,-framework', '-Wl,Accelerate'] extra_compile_args = ['-faltivec'] define_macros = [('NO_ATLAS_INFO', 3)] blas_opt_info: extra_link_args = ['-Wl,-framework', '-Wl,Accelerate'] extra_compile_args = ['-faltivec', '-I/System/Library/Frameworks/vecLib.framework/Headers'] define_macros = [('NO_ATLAS_INFO', 3)] >>> numpy.test() Running unit tests for numpy NumPy version 1.5.1 NumPy is installed in /Users/nulll/.virtualenvs/work/lib/python2.7/site-packages/numpy Python version 2.7.1 (r271:86832, Mar 30 2011, 22:36:37) [GCC 4.2.1 (Apple Inc. build 5664)] nose version 1.0.0 .... ---------------------------------------------------------------------- Ran 3006 tests in 14.955s OK (KNOWNFAIL=4, SKIP=1) <nose.result.TextTestResult run=3006 errors=0 failures=0>
MacPorts だと ATLAS を入れたような記憶があるけど、外部ライブラリとして Apple 謹製の Accelerate, vecLib という BLAS っぽい?ものが使われているみたいなので、まあこれでいいんじゃないでしょうか。test も(KNOWNFAIL, SKIP があるけど)OK みたいだし。
scipy
参考: http://www.scipy.org/Installing_SciPy/Linux の Building everything from source with gfortran on Ubuntu (Nov 2010) 以下
pip で入れると外部ライブラリを見つけてくれないので、ソースを落としてきて site.cfg を書いて build して install する。外部ライブラリとして使うのは amd, umfpack だけにする。昔は fftw も使えたみたいだけど、最近はライセンスの関係で使え(使わ?)なくなったらしい。代わりに pyfftw というものが使えるらしいが、fft はわりとどうでもいいので、やめた。
amd, umfpack は SuiteSparse の一部なので、brew で suite-sparse を入れる。依存関係で、metis と tbb も入る。
(work)$ brew install suite-sparse
scipy のソースを落としてくる。
(work)$ curl -LsSf http://downloads.sourceforge.net/project/scipy/scipy/0.9.0/scipy-0.9.0.tar.gz | tar xvz (work)$ cd scipy-0.9.0
以下のような site.cfg を書く。
[DEFAULT] library_dirs = /Users/nulll/homebrew/lib include_dirs = /Users/nulll/homebrew/include [amd] amd_libs = amd [umfpack] umfpack_libs = umfpack
以下のような構成になる。setup.py と同じディレクトリに site.cfg があれば、見てくれるらしい。
(work)$ ls INSTALL.txt MANIFEST.in THANKS.txt scipy setupscons.py LATEST.txt PKG-INFO TOCHANGE.txt setup.py site.cfg LICENSE.txt README.txt doc setupegg.py tools
setup.py で build して、install する。
(work)$ python setup.py build ... (work)$ python setup.py install ...
show_config と test の結果は以下のようになった。ちなみに、build したディレクトリで python インタプリタを起動して import scipy すると怒られる(怒られた)ので、適当なディレクトリに移動してからやった。
(work)$ python Python 2.7.1 (r271:86832, Mar 30 2011, 22:36:37) [GCC 4.2.1 (Apple Inc. build 5664)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import scipy >>> scipy.show_config() amd_info: libraries = ['amd'] library_dirs = ['/Users/nulll/homebrew/lib'] define_macros = [('SCIPY_AMD_H', None)] swig_opts = ['-I/Users/nulll/homebrew/include'] include_dirs = ['/Users/nulll/homebrew/include'] umfpack_info: libraries = ['umfpack', 'amd'] library_dirs = ['/Users/nulll/homebrew/lib'] define_macros = [('SCIPY_UMFPACK_H', None), ('SCIPY_AMD_H', None)] swig_opts = ['-I/Users/nulll/homebrew/include', '-I/Users/nulll/homebrew/include'] include_dirs = ['/Users/nulll/homebrew/include'] lapack_opt_info: extra_link_args = ['-Wl,-framework', '-Wl,Accelerate'] extra_compile_args = ['-faltivec'] define_macros = [('NO_ATLAS_INFO', 3)] blas_opt_info: extra_link_args = ['-Wl,-framework', '-Wl,Accelerate'] extra_compile_args = ['-faltivec', '-I/System/Library/Frameworks/vecLib.framework/Headers'] define_macros = [('NO_ATLAS_INFO', 3)] >>> scipy.test() Running unit tests for scipy NumPy version 1.5.1 NumPy is installed in /Users/nulll/.virtualenvs/work/lib/python2.7/site-packages/numpy SciPy version 0.9.0 SciPy is installed in /Users/nulll/.virtualenvs/work/lib/python2.7/site-packages/scipy Python version 2.7.1 (r271:86832, Mar 30 2011, 22:36:37) [GCC 4.2.1 (Apple Inc. build 5664)] nose version 1.0.0 ...... ---------------------------------------------------------------------- Ran 4722 tests in 85.832s OK (KNOWNFAIL=18, SKIP=42) <nose.result.TextTestResult run=4722 errors=0 failures=0>
amd, umfpack, lapack, blas で外部ライブラリが使われていることがわかる。test も KNOWNFAIL, SKIP があるものの、OK らしい。
まとめ
work という名前の virtualenv を作ったけど、働きたくない。