Python

Python 3.4.* をソースからビルドして科学計算用環境を構築するまでまとめ

More than 3 years have passed since last update.

Anaconda (https://store.continuum.io/cshop/anaconda/) で何とかしようと思ったら,pandasで大きなテーブルを読み込む際に munmap_chunk(): invalid pointer と怒られてしまったので,諦めてPython 3.4系をソースからビルドして科学計算用環境を構築したのでそのまとめ.

※canopyは凄く重いらしいと聞いたのでそもそも試してません.

※この時は気づかなかったのですが,エラー自体はpandasの read_json() メソッドのエラーだったようです。。。


用意した環境


  • Scientific Linux release 6.5 (Carbon)


Pythonのビルド

※詳細は以下のサイトを見た方が早いです

http://toomuchdata.com/2014/02/16/how-to-install-python-on-centos/

Python本体をビルドする前に,必要なライブラリ等を導入しておく.

これらが入っていなくてもPythonのインストール自体は無事に通ったりするが,後々ライブラリのnot foundエラーで苦しめられたりしてPythonの再インストールをするはめになったりするので,とにかく先に入れておく (自戒)

$ sudo yum groupinstall --skip-broken "Development tools"

$ sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

Python本体のビルドを行う. (今回は現在の最新バージョン3.4.2を導入する)

今回は /usr/local 以下にインストールする.バージョンの確認は以下のサイトから.

https://www.python.org/downloads/source/

$ wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz

$ tar xzvf Python-3.4.2.tgz
$ cd Python-3.4.2
$ ./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
$ make
$ sudo make install

以下のコマンドが実行出来れば導入完了.

$ which python3

/usr/local/bin/python3

Pythonのビルドがうまくいけば,自動的にpipも導入されているはずなので,以下のコマンドで確認しておく.

$ which pip3

/usr/local/bin/pip3


各種パッケージのインストール


科学計算用パッケージのインストール

Scipyをインストールするために必要なパッケージをあらかじめ導入しておく.

sudo yum install blas-devel lapack-devel

特定のパッケージ以外はpip3で順調に導入できる.

※sudoersにenv_keepしてなかったので,pip3を絶対パスでよんでます.

$ sudo /usr/local/bin/pip3 install nose pytest numpy scipy scikit-learn pandas


matplotlibのインストール

matplotlibをインストールするために必要なパッケージをあらかじめ導入しておく.

$ sudo yum install libpng-devel

matplotlibをpip3にてインストールしようとすると,以下の様なメッセージでビルドがfailedする.

============================================================================

* The following required packages can not be built:

* freetype

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_root/matplotlib
Storing debug log for failure in /root/.pip/pip.log

エラーメッセージをよくよく見ると,次のようなメッセージを発見.

REQUIRED DEPENDENCIES AND EXTENSIONS

...
freetype: no [Requires freetype2 2.4 or later. Found

2.3.11.]

matplotlibを入れるためには,freetype2の2.4以上が必要だが,デフォルトでは2.3.11が入っているっぽい.

ここでは,freetypeをソースからビルドすることにした.

ソースは以下のサイトからダウンロード出来る.

http://download.savannah.gnu.org/releases/freetype/

$ wget http://download.savannah.gnu.org/releases/freetype/freetype-2.5.3.tar.gz

$ tar xzvf freetype-2.5.3.tar.gz
$ cd freetype-2.5.3
$ ./configure
$ make
$ sudo make install

ここまで終わったところで再度pip3を行うと,今度は以下のようなエラーが発生した.

Downloading/unpacking matplotlib

Downloading matplotlib-1.4.0.tar.gz (51.2MB): 51.2MB downloaded
Running setup.py (path:/tmp/pip_build_root/matplotlib/setup.py) egg_info for package matplotlib
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/tmp/pip_build_root/matplotlib/setup.py", line 154, in <module>
result = package.check()
File "/tmp/pip_build_root/matplotlib/setupext.py", line 945, in check
min_version='2.4', version=version)
File "/tmp/pip_build_root/matplotlib/setupext.py", line 433, in _check_for_pkg_config
if (not is_min_version(version, min_version)):
File "/tmp/pip_build_root/matplotlib/setupext.py", line 166, in is_min_version
return found_version >= expected_version
File "/usr/local/lib/python3.4/distutils/version.py", line 76, in __ge__
c = self._cmp(other)
File "/usr/local/lib/python3.4/distutils/version.py", line 343, in _cmp
if self.version < other.version:
TypeError: unorderable types: str() < int()

このエラーについて調査したところ,どうやらPython 3.3/3.4系における既知のバグらしいことが分かった.

詳細については以下のissueを参照.

http://bugs.python.org/issue14894

ここであげられている14894.patchをダウンロードしてきてPythonにあてる.(この変更がPython本体にあてられてリリースされるのはいつになるのだろう。。。)

$ wget http://bugs.python.org/file25808/14894.patch

$ cd /usr/local/lib/python3.4/distutils/
$ sudo patch -p3 < /path/to/patch/14894.patch

ここまで終わったところでpip3を実行することで,matplotlibが入れられる.

$ sudo /usr/local/bin/pip3 install matplotlib


IPython Notebookを動かすためのパッケージをインストール

以下のパッケージ群を導入.

$ sudo /usr/local/bin/pip3 install ipython jinja2 tornado pyzmq


おわり

この後IPython Notebook Serverを動かしたりpytest/Theano/wabbit_wappa入れたりしたのですが,まとめるのが大変な感じになってきたのでここらで終わります.

IPython Notebook Serverについては,以下のサイトがよくまとまっているので参考までに.

http://akiniwa.hatenablog.jp/entry/2013/11/25/001805

Enjoy PyData!