Edited at

UbuntuでPythonをソースからインストール

Ubuntu 18.04 LTSがリリースされ、Python 3.7がパッケージに加わったので、単純にapt installで最新の Python 3.7 がインストールできるようになりました。

sudo apt install python3.7

それで、Python をソースからインストールする必要は殆どなくなったようです。でも、Ubuntu 16.04 を使っている場合は、この方法で Python 3.7 をインストールできるし、Ubuntu 18.04 の場合でも、--enable-optimizationsオプションを付けてコンパイルをすると数%速く動作したり、カスタマイズができるようなので興味がある人は試してみるといいと思います。


ソースからビルドする場合の基本

公式マニュアルによると、基本的には、ソースをダウンロードしてきて、普通にビルドをしてインストールできるとなっています。

./configure

make
sudo make install

また、警告があって「make install は python3 バイナリを上書きまたはリンクを破壊してしまうかもしれません。そのため、make install の代わりに exec_prefix/bin/pythonversion のみインストールする make altinstall が推奨されています。」と記載されています。

Ubuntuの場合は、既定でインストールするとusr/localにインストールされるので上書きまたはリンクの破壊はされませんが、PATHの優先順位の関係で、python3コマンドでpython3.7が起動するようになります。そうなるとシステムがバグるようになる可能性があるので「make altinstall」を使用るようにした方がいいです。でも、間違った場合には、慌てずにusr/localディレクトリにあるpython3を削除すればいいだけです。ついでに2to3, idle3, pip3, pydoc3, pyvenvを削除するとmake altinstallをしたのと同じになります。


実際の操作


サーバーの場合の依存関係のインストール

build-essentialパッケージを使って基本的な開発をインストールし、その他の不足している依存関係をインストールします。tk-devは、サーバーでは普通はtkを使わないで省いています。もし、サーバーに GUI をインストールしていてtkを使う場合は、tk-devを追加するようにします。

sudo apt update

sudo apt install build-essential
sudo apt install libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev libgdbm-dev libbz2-dev liblzma-dev zlib1g-dev uuid-dev libffi-dev libdb-dev


デスクトップの場合の依存関係のインストール

単純に以下のコマンドで依存関係をすべてインストールできます。もしそれが嫌だったら上のにtk-devを追加してインストールしてください。

sudo apt update

sudo apt build-dep python3.7

もし、以下のようなエラーが表示されれ実行が失敗する場合は、/etc/apt/sources.listを編集して、必要な場所のdeb-srcのコメントを外ずしてから実行してください。

E: You must put some 'source' URIs in your sources.list


Pythonをダウンロードしてインストールするまで

wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz

tar -xf Python-3.7.2.tar.xz
cd Python-3.7.2
./configure --enable-optimizations
make -s -j2
sudo make altinstall

configure--enable-sharedを付けると共有ライブラリを --enable-optimizationsオプションは、実際に./configureを実行すると付けたほうがいいというメッセージが出たので付けています。これをつけると処理が若干速くなるようです。しかし、テストをするのでmakeに20分ぐらいかかります。コンパイルに時間を書けたくない場合は付けないほうがいいでしょう。

makeのjオプションは、コンパイルするときに使用するコアの数を指定するもので、-j2とすると2コアを使用するようになります。jオプションを付けないと1コアだけしか使わないのでコンパイル時間が短くなります。

configureを実行するときに--prefixオプションを設定することでインストール先を変更することができます。例えば、ルート権限がない場合には、次のようにすれば、ホームディレクトリーにインストールできます。Ubuntuの場合には、デフォルトで~/.local/binにPATHが通っているので、インストール後すぐにpython3.7で利用できりようになります。

./configure --prefix=$HOME/.local --enable-optimizations

make -s -j2
make altinstall