名古屋出身ソフトウェアエンジニアのブログ

Debian に Python をソースからインストールする

公開:
更新:

VPS の Debian に最新の Python をインストールする必要があり、初めて Python をソースからビルドしました。

ビルド自体は非常に簡単で、既存の Python を壊さず共存インストールまでできるので良かったのですが、依存パッケージの選定にやや苦労したのでメモを残します。

環境

  • Debian 11 bullseye
  • Linux 5.10

必要なパッケージのインストール

公式ドキュメントなどを見て依存物をインストールしビルドを試みましたが、一部不足しているパッケージが出てしまいました。最終的には、以下のコマンドで必要なものがすべて入りました。

sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libncursesw5-dev libgdbm-dev libdb-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget curl llvm libbz2-dev
# 追加分
sudo apt install uuid-dev lzma-dev liblzma-dev xz-utils tk-dev

Python ソースコードのダウンロード

Python 公式 より Python のソースコードをダウンロードします。

wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
tar -xvf Python-3.11.0.tgz

Python をビルド

./configure --enable-optimizations で最適化フラグを立てた後に make するだけです。簡単です。

cd Python-3.11.0
./configure --enable-optimizations
make

このとき、The necessary bits to build these optional modules were not found のようなメッセージが出ている場合は、いくつかのパッケージが不足しています。そのときには、何が不足しているのかを頑張って分析します(それが難しい)。

ビルドが成功した場合は python バイナリが出力されているので、

./python

このように、インタプリタの起動を確認します。

Python をインストール

完成したバイナリをシステムにインストールします。 Debian 11 だと、最初から Python 3.9 がインストールされていますが altinstall を使うことで、3.9 の環境に影響を与えることなく、別のコマンドとしてインストールできます。

sudo make altinstall

これで、マイナーバージョン付きの Python コマンドで起動できるようになっているはずです。

python3.11

Python インストールの仕様

他のマイナーバージョンの Python を同じやり方で共存インストールできます。例えば、python3.12 をインストールすると、python3.11 とは独立して使用できます。

マイナーバージョンと違い、パッチバージョンの更新は上書きされます。 Python 3.11.1 をインストールすると、python3.11 コマンドは Python 3.11.1 を指します。

利便性のために Ubuntu にもともとある python3 コマンドのリンクを貼り直してはいけません。一部の Linux コマンドがこれを使用しており、システムが壊れます。

# これはやってはダメ
sudo ln -sf /usr/local/bin/python3.11 /usr/bin/python3

pip のインストール

get-pip.py を使ってインストールします。

wget https://bootstrap.pypa.io/get-pip.py
sudo python3.11 get-pip.py

環境によっては、マイナーバージョン表記なしの pip3 コマンドが新しい Python の環境を指しているかもしれません1。このとき、パスは /usr/local/bin/pip3 中の shebang で指定されているようです。

バージョンアップ

上記で示したように、マイナーバージョンの違う Python は altinstall を使うことで共存できます。

一方でパッチバージョンの更新を altinstall する場合は、既存の場所に上書きされます。

# 例: 3.11.0 -> 3.11.2
cd Python-3.11.2
./configure --enable-optimizations
make
sudo make altinstall
python3.11 # 3.11.2

セキュリティのこともあるので、パッチバージョンについては、まめに更新するようにしましょう。


  1. おそらく、デフォルト Python に pip を導入していないときに発生 ↩︎