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!