Closed6

Python ビルド依存関係の一次情報を探す

まちゅけんまちゅけん

自分の Python 環境はソースコードからビルドしてインストールしています。

https://docs.python.org/ja/3/using/unix.html#building-python

ビルドするには事前にビルド依存関係のインストールが必要です。必要なパッケージ名は Qiita や Stack Overflow などのググった結果の「断片的な情報」で見るけることもできます。 しかしそれでは OS を入れ替えるごとに検索結果により毎回違う手順になってしまうかもしれません。

ここでは忘れがちな「正しいビルド依存関係」を Python 公式の一次情報より調べてまとめておきます。

まちゅけんまちゅけん

Python Developer's Guide

Python Developer's Guide のドキュメントに書かれている内容を要約します。

https://devguide.python.org/getting-started/setup-building/#install-dependencies

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 ビルド依存関係をインストールするために実行しているように見えます。

https://github.com/python/cpython/blob/main/.github/workflows/posix-deps-apt.sh

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 命令が書かれています。

https://gitlab.com/python-devs/ci-images/-/blob/main/Dockerfile

docker-library/python リポジトリの Dockerfile

Docker 公式 Python イメージの Dockerfile です。 これは Debian ベースです。

slim-bookworm:

https://github.com/docker-library/python/blob/master/3.12/slim-bookworm/Dockerfile#L30-L56

bookworm とその元の buildpack-deps:bookworm:

https://github.com/docker-library/python/blob/master/3.12/bookworm/Dockerfile#L18-L24

https://github.com/docker-library/buildpack-deps/blob/master/debian/bookworm/Dockerfile#L9-L53

まちゅけんまちゅけん

まとめ

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 点

なので 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 を正常にビルドできるようになります 👍

このスクラップは2024/05/06にクローズされました