Pythonで統計解析シリーズの続きです。
単回帰分析などの統計解析をするときは、SciPy を使うのが簡単です。
しかし、いざ Mac に SciPy をインストールしようとしたら、なかなかうまく行かず。。
同じ悩みを抱えている人も多かったのですが、これぞ!という正解が見つからず苦労したので、その経緯をメモ。
環境
Mac X OS バージョン10.7.5 です。
$ uname -a Darwin xxxx-xx-MacBook-Pro.local 11.4.2 Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64 x86_64
Pythonのバージョンは、2.7.1。
$ which python /usr/bin/python $ python --version Python 2.7.1
SciPy のインストールには gcc, gfortran が必要なのですが、gccはインストール済み。gfortran はまだ入ってませんでした。
$ gcc -v gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)
やったこと
まずは普通に SciPy を easy_install してみるもダメ。
$ sudo easy_install scipy Reading http://pypi.python.org/simple/scipy/ Best match: scipy 0.12.0 ・ ・ error: Setup script exited with error: library dfftpack has Fortran sources but no Fortran compiler found /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/distutils/misc_util.py:251: RuntimeWarning: Parent module 'numpy.distutils' not found while handling absolute import from numpy.distutils import log
Fortran compiler がないのは分かるが、'numpy.distutils' not found ってどういうこと?としばし悩む。(GitHubからソースコードをcloneしてbuildしても、no Fortran compiler found と怒られます。)
NumPyをアップデート
とりあえず、numpy のバージョンを調べると、1.5.1。
$ python >>> import numpy >>> numpy.__version__ '1.5.1' >>> numpy.__path__ ['/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy']
もしかすると古すぎるのが原因かなと思い、アップデートすることに。
$ sudo easy_install -U numpy Searching for numpy Reading http://pypi.python.org/simple/numpy/ Best match: numpy 1.7.1 Downloading http://pypi.python.org/packages/source/n/numpy/numpy-1.7.1.zip#md5=9a72db3cad7a6286c0d22ee43ad9bc6c Processing numpy-1.7.1.zip Running numpy-1.7.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-zakNF1/numpy-1.7.1/egg-dist-tmp-PtyMpk Running from numpy source directory. error: SandboxViolation: open('/dev/null', 'w') {} The package setup script has attempted to modify files on your system that are not within the EasyInstall build area, and has been aborted. This package cannot be safely installed by EasyInstall, and may not support alternate installation locations even if you run its setup script by hand. Please inform the package's author and the EasyInstall maintainers to find out if a fix or workaround is available.
error: SandboxViolation が出て、アップデートできず。
easy_install で updateできないという numpyのバグ?らしく、回避策はあるらしいのですが(distributeをインストール?)、正直ちょっとよく分からなかったので保留。
https://github.com/numpy/numpy/issues/3160
そこで、GitHubから最新のソースコードを取ってきて buildしてみたら、無事インストールできました。
$ git clone https://github.com/numpy/numpy.git $ cd numpy $ python setup.py build $ sudo python setup.py install ・ ・ creating /Library/Python/2.7/site-packages/numpy/core/lib creating /Library/Python/2.7/site-packages/numpy/core/lib/npy-pkg-config copying build/src.macosx-10.7-intel-2.7/numpy/core/lib/npy-pkg-config/npymath.ini -> /Library/Python/2.7/site-packages/numpy/core/lib/npy-pkg-config copying build/src.macosx-10.7-intel-2.7/numpy/core/lib/npy-pkg-config/mlib.ini -> /Library/Python/2.7/site-packages/numpy/core/lib/npy-pkg-config running install_egg_info Writing /Library/Python/2.7/site-packages/numpy-1.8.0.dev_15f2d60-py2.7.egg-info running install_clib copying build/temp.macosx-10.7-intel-2.7/libnpymath.a -> /Library/Python/2.7/site-packages/numpy/core/lib
NumPy 1.8.0 がインストールできました。
$ python >>> import numpy >>> numpy.__version__ '1.8.0.dev-15f2d60' >>> numpy.__path__ ['/Library/Python/2.7/site-packages/numpy']
ちなみに、python setup.py install でインストールしたものをアンインストールするときは、以下のようにします。
$ sudo python setup.py install --record files.txt $ cat files.txt | xargs sudo rm -rf
gfortran のインストール
http://r.research.att.com/tools/ から「GNU Fortran 4.2.4 for Mac OS X 10.7 (Lion)」を入手します。
gfortran-lion-5666-3.pkg を入れようとするも、「ディスクにインストールできない」と。gccの問題?? バージョンは合ってそうだけどなぁ。。
諦めず、「gcc-4.2 (Apple build 5666.3) with GNU Fortran 4.2.4 for Mac OS X 10.7 (Lion)」の方をダウンロードしてみます。
こちらはすんなりインストールできました。
しかしながら、
$ gfortran -bash: gfortran: command not found $ gfortran-4.2 -v Using built-in specs. Target: i686-apple-darwin11 Configured with: /Volumes/Media/Builds/gcc-5666.3/build/obj/src/configure --disable-checking --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++,fortran --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/include/c++/4.2.1 Thread model: posix gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)
gfortranコマンドが叩けず(gfortran-4.2になってる?)、SciPy のコンパイルもまだ相変わらずできません。
gfortranが入らないとき 上のパッケージでインストールできないときはまたTools - R for Mac OS X - developer’s page - GNU Fortan for Xcodeからgcc-4.2 (Apple build 5666.3) with GNU Fortran 4.2.4 for Mac OS X 10.7 (Lion)のgcc-42-5666.3-darwin11.pkgを使ってインストール。 それでもgfortranが動かなければ、もう一度先ほどのgfortran-lion-5666-3.pkgを実行すると動く(かもしれない)。 http://d.hatena.ne.jp/adbmal/20111220/1324345727
を参考に、もう一度「gfortran-lion-5666-3.pkg」を入れてみると、さっきダメだったのが何故かインストールできるようになりました。
gfortranも動いた。うーん、よく分からん。
$ gfortran -v Using built-in specs. Target: i686-apple-darwin11 Configured with: /Volumes/Media/Builds/gcc-5666.3/build/obj/src/configure --disable-checking --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++,fortran --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/include/c++/4.2.1 Thread model: posix gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)
SciPyのインストール
無事 gfortranも入ったので、SciPy をGitHubの最新ソースコードからコンパイルしてインストールしてみます。
$ git clone https://github.com/scipy/scipy.git $ cd scipy $ sudo python setup.py build $ sudo python setup.py install ・ ・ copying scipy/weave/doc/tutorial.txt -> /Library/Python/2.7/site-packages/scipy/weave/doc/ copying scipy/weave/doc/tutorial_original.html -> /Library/Python/2.7/site-packages/scipy/weave/doc/ running install_egg_info Writing /Library/Python/2.7/site-packages/scipy-0.13.0.dev_bb974e3-py2.7.egg-info running install_clib
ぶひぃー。やっと入りました。
$ python >>> import scipy >>> scipy.__version__ '0.13.0.dev-bb974e3' >>> scipy.__path__ ['/Library/Python/2.7/site-packages/scipy']
あとがき
結局、この情報が一番正しかったのかもしれません。
http://osamu-tadanomemo.blogspot.jp/2011/10/mac-lionnumpyscipymatplotlib.html
gfortranは、
http://gcc.gnu.org/wiki/GFortranBinaries#MacOS の「Mac OS Lion (10.7) on Intel 64-bit processors (gfortran 4.6.2)」をインストールすれば、もっと簡単だたのかも。
あと、NumPyのアップデートは必要だったのかどうかよく分かりません。。ま、結果オーライということで。