Mavericksでpython環境構築ではまったメモ(2014年5月29日版)

OSをバージョンアップして、MacBook Pro(Late 2011)にOS X 10.9.3 Mavericksを入れてみました。これまでOSはバグなどもあまりなく安定しており使い慣れた古い版のままでいいやとずっと思っていましたが、走らせてみたい新しいソースコードの対応具合や使ってみたい新機能などの期待される利点などの方がようやく上回り、重い腰を上げました。クリーンインストールをしてから、タイムマシンからデータを戻しました。

さて、Maverickspythonの環境を構築するにあたっていろいろ調べたところ、最近はHomebrewが流行っているようだという印象を受けました。NumPy、SciPy、Matplotlibあたりを入れるのを目標にします。早速取りかかろうとしたところ、MacPortsが入っていると競合してしまいよくない(3.1節参照)ということが分かり、そちらを消してきれいにするところから始めました。タイムマシンからデータを移行して古い環境まで復旧されてしまうと、クリーンインストールの意味が無かったですね。しょぼん。Pythonをいじってみたのはもう何年も前なので、そもそもどんな環境で使っていたのか思い出せませんが、MacPortsで入れたpython2系をvirtualenvとvirtualenvwrapperで作った仮想環境で試していたようです。BeautifulSoupが便利だなと思った記憶があります。

MacPortsやそれに関連したフォルダやPATHを削除して、Xcodeコマンドラインツールを入れておきます。コマンドラインツールは

xcode-select --install

とするとインストールされます。そこで、Homebrewを入れます。

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"
brew doctor

このbrew doctorでエラーや警告がなくなるまでがんばります。と書いてあるのをよく見かけますが、本当にその通りでした。どうしてもMacPortsの名残などがたくさん残っているので怒られっぱなしでした。やれ、writeできないディレクトリがあるから'chown'しろだの、Broken symlinksを`brew prune`しろだの、brew install gitでgitを入れろだの、MonoがあるとCMakeする邪魔だとか、Unexpected 〜〜 filesと言われたものはすべてrmする、など。言われた通りに順番に対処していくと、ようやく

Your system is ready to brew.

と表示されて、ほっと一息をつき、しばらく感動の余韻にひたりました。バージョンを確認すると、

brew -v

Homebrew 0.9.5が無事に入ったようです。

次に、コンパイルにgFortranが必要ということなので、入れます。「科学計算ライブラリscipyの中で動く」らしいです。

brew install gfortran

Error: No available formula for gfortran
GNU Fortran is now provided as part of GCC, and can be installed with:
brew install gcc
おかしいなあ。他のサイトではすんなりこれで行くと書いてあるのに。言われた通りgccを入れても、gfortranがないって怒られます。今、これを書きながら追加で調べたら、こうやると、

brew versions gfortran

Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
https://github.com/Homebrew/homebrew-versions
と出るので、バージョンを指定して"homebrew-versions"というのを入れればよかったのかもしれません。
また、ここを読む限り(2014/05/17のコメント参照)gccを入れておけば、gfortranをさらに追加で入れる必要はないのかもしれませんが、でもエラーが消えなかったし変なの。手元の環境が変なのかもしれません。実際に上手く行った手順としては、ここから対応するOSのgfortranのインストーラーをダウンロードして入れたら動きました。

その後の試行錯誤の結果のコマンドはこんな感じ。python3系を入れてみることにした。

brew install python3
pip3 install --upgrade setuptools
pip3 install --upgrade pip
brew linkapps
pip3 install numpy
brew install swig
pip3 install cython
pip3 install scipy
brew install freetype
brew link --overwrite --dry-run libpng
brew link --overwrite libpng
sudo ln -s /usr/local/include/freetype2 /usr/include/freetype
sudo pip3 install matplotlib

途中いろいろ意味が分からないけれど、とりあえずやっておくというのを入れた。でも、2行目か3行目でupgradeしたせいで、cythonをインストールするときにeasy_install3コマンドが使えなくなったのかもしれない、ということを後で知りました。matplotlibに必要なfreetypeとlibpngは、freetypeを入れたら、libpngも自動的に入るようだ。libpngをインストールしようとすると、もう入っていると怒られる。ただし、リンクが貼られてないということなので、brew linkするといいみたい。シンボリックリンクを貼るのが足りない気もする。どれが必要で、どれが冗長かあるいは余計で、どれが上手く行ったコマンドなのかすでによくわかりません。とりあえず動くようになったことを、matplotlibのギャラリーにある図が作れるかどうかで確かめました。

ここまでをまとめると、python3、numpy、scipy、matplotlibがようやう入りました。後は、scikit-leanやipythonなどを続々入れたいと思います。

参考にしたページ:

などを参照しました。どうもありがとうございました。

Homebrewでpython3系の計算機環境(の入り口。一部)が構築できたところで、いくつかコマンド

python --version
which python
pip freeze
python3 --version
which python3
pip3 freeze

を思い出してきたので試したところ、今回作った3系と独立に、昔作った2系の環境もまだ生きていることが分かり、matplotlibでプロットもできました。2系が消えてなかったのなら、今回こんなに苦労して3系を入れなくてもよかったんじゃない?という疑問は、とりあえず持たないでいようと思います。前回は、Scipy Superpackを使って入れたようなことを思い出しましたが、今回もそれを使えばよかったかもです。

Pythonのいくつかのバージョンを複数使い分ける場合は、pyenvを使うのが最近のトレンドのようです。さらに、pyenv, rbenv, plenvなど複数の言語の〜〜envを一括で扱うanyenvというのも作られているそうです。

また、使用目的にもよりますが、もっと一括で有用なパッケージを導入する方法として、Anacondaというのがよさそう。ということに後で気がつきました。

Anaconda
Completely free enterprise-ready Python distribution for large-scale data processing, predictive analytics, and scientific computing: 125+ of the most popular Python packages for science, math, engineering, data analysis. All Products are Free for Academic Use.
https://store.continuum.io/cshop/anaconda/

まだ試してませんが、このあたりのサイトが参考になりそうです。これからまたpyenvやAnacondaを入れるなら、今回構築した環境を消した方が無難なんでしょうか。それはちょっとつらいです。でも誰だっていつでもどこからでもまたゼロから何かを始められます。ツァラトゥストラが見た牧人がのど元に咬みついたヘビの頭を噛み切って次のステージへと階段を進んだように、ニシキヘビやアナコンダカナヘビとかとにかくなんでもいいけど、カナヘビはヘビじゃなくてトカゲだけど、ともかく語尾に-pyがつくようないろんな便利な道具を使いこなせるようになる日を目指して。