前回と同様にvagrantでUbuntu 14.04 LTS (ubuntu/trusty64) の仮想マシンを立ち上げてまっさらな状態からPythonをソースコードからインストールします。

1
$ sudo apt-get update
1
2
3
4
5
$ wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
$ tar xzf Python-3.4.2.tgz
$ cd Python-3.4.2
$ ./configure --prefix=/opt/python-3.4.2
$ make 2>&1 | tee make.log

apt-get updateだけしてビルド

特にパッケージを追加インストールしないでそのままビルドすると、こんな感じのモジュールがビルドされない。

1
2
3
4
_bz2                  _curses               _curses_panel
_dbm                  _gdbm                 _lzma
_sqlite3              _ssl                  _tkinter
readline              zlib

pyenvのwikiを参考にしてビルド

pyenvhttps://github.com/yyuu/pyenv/wiki/Common-build-problems で紹介されてる依存パッケージをインストールしてビルドしてみるとこんな感じ。

1
$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm
1
2
_curses            _curses_panel      _dbm
_gdbm              _lzma              _tkinter  

パーフェクトPythonを参考にしてビルド

パーフェクトPythonで紹介されていたパッケージをインストールしてビルドしてみるとこんな感じ。

1
$ sudo apt-get install -y libbz2-dev libreadline-dev libssl-dev libsqlite3-dev libgdbm-dev zlib1g-dev tk-dev tcl-dev
1
_curses               _curses_panel         _lzma  

上記+α

さらにliblzma-dev libncurses5-devを追加してビルドしてみるとひとまず全てのモジュールはビルドされている様子。

1
$ sudo apt-get install -y libbz2-dev libreadline-dev libssl-dev libsqlite3-dev libgdbm-dev zlib1g-dev tk-dev tcl-dev iblzma-dev libncurses5-dev

Python Developer’s Guideを参考に

Python Developer’s Guide https://docs.python.org/devguide/setup.html#compiling-for-debugging で紹介されているビルド方法はこんな感じ。

1
$ sudo apt-get build-dep python3.4

上記コマンドを実行すると一通りすべてのモジュールがビルドされた状態から追加でインストールされるパッケージは以下のようになってた。この中に気になるのがあればこちらのほうがやはりいいのかも。

1
2
3
4
5
6
7
The following NEW packages will be installed:
  autoconf blt blt-dev debhelper dh-apparmor diffstat docutils-common gettext
  intltool-debian libbluetooth-dev libbluetooth3 libcroco3 libdb-dev
  libdb5.3-dev libffi-dev libjs-sphinxdoc libjs-underscore libmpdec-dev
  libncursesw5-dev libunistring0 m4 po-debconf python-docutils python-jinja2
  python-markupsafe python-pygments python-roman python-sphinx quilt sharutils
  sphinx-common xvfb

ただpython3.4っていうパッケージがない場合は、バージョン下げたりしてパッケージ探してね、とあるのでスクリプト化を考えると若干使いづらいかも。

If that package is not available for your system, try reducing the minor version until you find a package that is available.

まとめ

依存パッケージをインストール

おそらく最小限なパッケージをインストールするか

1
$ sudo apt-get install libbz2-dev libreadline-dev libssl-dev libsqlite3-dev libgdbm-dev zlib1g-dev tk-dev tcl-dev iblzma-dev libncurses5-dev

build-depを利用して依存パッケージをインストールする

1
$ sudo apt-get build-dep python3.4

ソースコードをダウンロードしてビルド

1
2
3
4
5
6
$ wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
$ tar xzf Python-3.4.2.tgz
$ cd Python-3.4.2
$ ./configure --prefix=/opt/python-3.4.2
$ make 2>&1 | tee make.log
$ sudo make install 2>&1 | tee make_install.log

Comments