Python ビルド依存関係の一次情報を探す
自分の Python 環境はソースコードからビルドしてインストールしています。
ビルドするには事前にビルド依存関係のインストールが必要です。必要なパッケージ名は Qiita や Stack Overflow などのググった結果の「断片的な情報」で見るけることもできます。 しかしそれでは OS を入れ替えるごとに検索結果により毎回違う手順になってしまうかもしれません。
ここでは忘れがちな「正しいビルド依存関係」を Python 公式の一次情報より調べてまとめておきます。
Python Developer's Guide
Python Developer's Guide のドキュメントに書かれている内容を要約します。
DNF 系
DNF 系は dnf builddep
コマンドを利用するだけで済むようです。
sudo dnf install dnf-plugins-core # install this to use 'dnf builddep'
sudo dnf builddep python3
APT 系
APT 系は DNF 系に比べて若干手順が多いです。 まずのソースコードリポジトリ (deb-src
) を有効にしてから、以下のコマンドでビルド依存関係をインストールします。
sudo apt-get build-dep python3
sudo apt-get install pkg-config
APT 系は apt-get build-dep
というコマンドを利用するようです。 ただしこれだけではビルド依存関係としては足りないみたいで、完全なビルド依存関係を得るには以下のパッケージを個別にインストールするよう指示されています。
sudo apt-get install build-essential gdb lcov pkg-config \
libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev \
libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev \
lzma lzma-dev tk-dev uuid-dev zlib1g-dev libmpdec-dev
python/cpython
リポジトリの posix-deps-apt.sh
python/cpython
リポジトリの posix-deps-apt.sh
は Python Core Devs が利用しているGitHub Actions で実行されるシェルスクリプトです。 ubuntu-latest
の CI 環境に対して Python ビルド依存関係をインストールするために実行しているように見えます。
GitHub からスクリプトを取得してそれをシェルで実行すれば自動でビルド依存関係をインストールできます。
$ curl -fsSL https://github.com/python/cpython/raw/main/.github/workflows/posix-deps-apt.sh | sudo sh
その他の一次情報
python-devs/ci-images
リポジトリの Dockerfile
python-devs/ci-images
リポジトリの Dockerfile
です。 Ubuntu の CI 環境に対してビルド依存関係をインストールするための Dockerfile 命令が書かれています。
docker-library/python
リポジトリの Dockerfile
Docker 公式 Python イメージの Dockerfile です。 これは Debian ベースです。
slim-bookworm
:
bookworm
とその元の buildpack-deps:bookworm
:
まとめ
Python Developer's Guide の方法に従うのが確実なのかなと思いました。
ただよく使う APT 系ではソースリポジトリを有効化する手順が必要です。 それが面倒に感じる場合はパッケージ名が静的に羅列されている python/cpython
リポジトリの posix-deps-apt.sh
スクリプトを利用するのも良さそうです。 ただこのスクリプトが長らくメンテナンスされるか分かりませんし、もしスクリプトのファイル名が変わってきたりすると、その時点でこちらのインストールがこけてしまいます (勿論パーマリンクを指定する手もありますが、更新は得られません) 。
追記:
Ubuntu 24.04 で Python Developer's Guide の方法に従おうとすると libmpdec-dev
がインストールできませんでした。 そしてこれを無視して現在プレリリースである Python 3.13 をビルドしようとすると libmpdecimal
が見つからないと言われて警告が発生します。
configure: WARNING: no system libmpdecimal found; falling back to bundled libmpdecimal (deprecated and scheduled for removal in Python 3.15)
調べてみたところ原因は decimal
モジュールに関するものであり要因としては 2 点
- Debian 12 や Ubuntu 24.04 からは APT パッケージとして
libmpdec-dev
が提供されなくなった: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1056785, https://github.com/python/cpython/pull/118539#issuecomment-2092573462 - Python 3.13 からの Configure は
libmpdec
を Python 自体にバンドルされたバージョンではなくシステムのバージョンを使用するフラグ (--with-system-libmpdec=yes
) が有効になった: https://github.com/python/cpython/issues/115119
なので Python 3.13 デフォルトの --with-system-libmpdec=yes
に従うには APT リポジトリから提供されていない libmpdec
を自前でビルドする必要があります。
といっても mpdecimal 公式 Web サイト (https://www.bytereef.org/mpdecimal/quickstart.html) にある手順に従うだけです。 まずは適当なディレクトリに Downloads にあるソースをダウンロードして:
cd `mktemp -d` && curl -fsSL https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-4.0.0.tar.gz | tar -xz --strip-components=1
あとは quickstart にある手順通りです:
# Unix: ./configure make # Run the tests (optional). This downloads the official test cases # (text files): make check # As root, install the libraries: sudo make install # Depending on your system (e.g., Ubuntu), you may need to run ldconfig. # Replace "/usr/local/lib" with the actual install location that appears # in the "make install" output: sudo ldconfig /usr/local/lib
これでビルド依存関係としての libmpdec
を解決できるので Python 3.13 を正常にビルドできるようになります 👍