akiyoko blog

akiyoko の IT技術系ブログです

Mac に SciPy をインストール

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)」を入手します。

f:id:akiyoko:20130614014556p:plain

gfortran-lion-5666-3.pkg を入れようとするも、「ディスクにインストールできない」と。gccの問題?? バージョンは合ってそうだけどなぁ。。

f:id:akiyoko:20130614014633p:plain


諦めず、「gcc-4.2 (Apple build 5666.3) with GNU Fortran 4.2.4 for Mac OS X 10.7 (Lion)」の方をダウンロードしてみます。

f:id:akiyoko:20130614014733p:plain

こちらはすんなりインストールできました。

f:id:akiyoko:20130614014808p:plain

しかしながら、

$ 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」を入れてみると、さっきダメだったのが何故かインストールできるようになりました。

f:id:akiyoko:20130614014857p:plain

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のアップデートは必要だったのかどうかよく分かりません。。ま、結果オーライということで。