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
セキュリティのこともあるので、パッチバージョンについては、まめに更新するようにしましょう。
おそらく、デフォルト Python に pip を導入していないときに発生 ↩︎