8.52. Python-3.12.5

Python 3 パッケージは Python 開発環境を提供します。 オブジェクト指向プログラミング、スクリプティング、大規模プログラムのプロトタイピング、アプリケーション開発などに有用なものです。 Python はインタープリター言語です。

概算ビルド時間: 2.2 SBU
必要ディスク容量: 530 MB

8.52.1. Python 3 のインストール

Python をコンパイルするための準備をします。

./configure --prefix=/usr        \
            --enable-shared      \
            --with-system-expat  \
            --enable-optimizations

configure オプションの意味

--with-system-expat

本スイッチは、システムにインストールされている Expat をリンクすることを指示します。

--enable-optimizations

本スイッチは、拡張的ではあるものの高くつく最適化を有効にします。 インタープリターは二度ビルドされます。 そこでは 1 回めのビルドにて実施されるテストを用いて、最適化された最終バージョンが適正化されます。

パッケージをコンパイルします。

make

テストの中には不安定でありハングするものがあります。 そういったものをテストする場合は、各テストケースにおいて 2 分以内の制限をかけてテストスイートを実行してください。

make test TESTOPTS="--timeout 120"

比較的遅いシステムの場合は、その時間制限を増やせば 1 SBU (1 コアを使った Binutils 1 回目のビルド時間) で処理できるはずです。 テストの中には一風変わったものがあって、自動的に再実行された上で失敗するものがあります。 一度失敗して再実行の際に成功したものは、テストが成功したものとみなすことができます。

パッケージをインストールします。

make install

Python 3 プログラムやモジュールをインストールする際には、全ユーザー向けのインストールを行うために root ユーザーになって pip3 コマンドを用いています。 このことは Python 開発者が推奨している、仮想環境内にて一般ユーザーにより(そのユーザーが pip3 を実行することで)パッケージビルドを行う方法とは相容れないものです。 これを行っているため、root ユーザーとして pip3 を用いると、警告メッセージが複数出力されます。

開発者がなぜその方法を推奨しているかというと、システムパッケージマネージャー(たとえば dpkg)などと衝突が発生するからです。 LFS ではシステムワイドなパッケージマネージャーを利用していないため、このことは問題となりません。 また pip3 そのものが、自分の最新版が存在していないかどうかを実行時に確認します。 LFS の chroot 環境においては、ドメイン名解決がまだ設定されていないので、最新版の確認は失敗して警告が出力されます。

LFS システムを再起動してネットワーク設定を行えば、(最新版の入手可能時にはいつでも)あらかじめビルドされていた wheel を PyPI から更新するような警告メッセージが示されます。 もっとも LFS では pip3 を Python 3 の一部として考えるので、個別に更新しないでください。 したがってあらかじめビルドされた wheel を更新することは、ソースコードから Linux システムをビルドするという目的から逸脱してしまいます。 このことから、pip3 の最新版を求める警告は無視してください。 警告メッセージを省略したい場合は、以下のコマンドを実行します。 ここでは設定ファイルを生成します。

cat > /etc/pip.conf << EOF
[global]
root-user-action = ignore
disable-pip-version-check = true
EOF
[重要]

重要

LFS や BLFS においては通常、Python モジュールのビルドとインストールには pip3 コマンドを用いています。 この両ブックにおいて実行する pip3 install コマンドは、(Python 仮想環境内でない場合には) root ユーザーで実行するようにしてください。 root ユーザー以外によって pip3 install を実行しても問題なく動作するように見えるかもしれませんが、インストールしたモジュールが別のユーザーからはアクセスできない事態を作り出してしまいます。

pip3 install は、すでにインストールされているモジュールを自動的に再インストールすることは行いません。 pip3 install コマンドを使ってモジュールのアップグレードを行う(たとえば meson-0.61.3 から meson-0.62.0 にするような場合)には、コマンドラインに --upgrade オプションを含めてください。 またモジュールのダウングレードや再インストールが必要となる理由が確実にあるのであれば、コマンドラインに --force-reinstall --no-deps を含めて実行してください。

必要なら、整形済みドキュメントをインストールします。

install -v -dm755 /usr/share/doc/python-3.12.5/html

tar --no-same-owner \
    -xvf ../python-3.12.5-docs-html.tar.bz2
cp -R --no-preserve=mode python-3.12.5-docs-html/* \
    /usr/share/doc/python-3.12.5/html

ドキュメント install コマンドの意味

--no-same-owner (tar) と --no-preserve=mode (cp)

インストールするファイルの所有者とパーミッションを適切に設定します。 このオプションがないと tar によって展開されるファイルは、アップストリームが作り出した値になってしまい、またファイルのパーミッションが限定的になることがあります。

8.52.2. Python 3 の構成

インストールプログラム: 2to3, idle3, pip3, pydoc3, python3, python3-config
インストールライブラリ: libpython3.12.so, libpython3.so
インストールディレクトリ: /usr/include/python3.12, /usr/lib/python3, /usr/share/doc/python-3.12.5

概略説明

2to3

Python 2.x のソースコードを読み込み、種々の変更を行って Python 3.x 用の適正なソースコードに変換するための Python プログラムです

idle3

Python に特化した GUI エディターを起動するラッパースクリプト。 このスクリプトを実行するには、Python より前に Tk をインストールして、Python モジュールである Tkinter をビルドしておく必要があります。

pip3

Python のパッケージインストーラー。 この pip を使って Python Package Index などのインデックスサイトから各種パッケージをインストールできます。

pydoc3

Python ドキュメントツール。

python3

Python インタープリターであり、対話的なオブジェクト指向プログラミング言語。