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

  • 11
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

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!