LoginSignup
12
12

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-10-18

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!

12
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12