Python
Ubuntu
pyenv
Pipenv

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

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

sudo apt install python3.7

それで、Python をソースからインストールする必要は殆どなくなったでしょう。ただし、--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-dep python3.7でインストールしてもいいのですが、X11関連のサーバーでは使わない機能がかなりインストールされます。build-essentialパッケージを使って基本的な開発をインストールし、その他の不足している依存関係をインストールします。

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.1/Python-3.7.1.tar.xz
tar -xf Python-3.7.1.tar.xz
cd Python-3.7.1
./configure --enable-optimizations
make -s -j2
sudo make altinstall

configure--enable-optimizationsオプションは、実際に./configureを実行すると付けたほうがいいというメッセージが出たので付けています。これをつけると処理が若干速くなるようです。

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

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

./configure --prefix=$HOME/.local --enable-optimizations
make -s -j2
make altinstall