第5章 Python 3 RPM のパッケージ化
DNF パッケージマネージャーを使用して、Python パッケージをシステムにインストールできます。DNF は RPM パッケージ形式を使用します。これにより、ソフトウェアのダウンストリーム制御が強化されます。
Python プロジェクトを RPM パッケージにパッケージ化すると、ネイティブ Python パッケージと比較して次の利点が得られます。
- Python および Python 以外のパッケージへの依存が可能です。依存関係は DNF パッケージマネージャーによって厳密に適用されます。
- パッケージに暗号で署名できます。暗号化署名を使用すると、RPM パッケージのコンテンツを、オペレーティングシステムの他の部分を使用して検証、統合、およびテストできます。
- ビルドプロセス中にテストを実行できます。
ネイティブ Python パッケージのパッケージ形式は、Python Packaging Authority (PyPA) 仕様 によって定義されています。歴史的に、ほとんどの Python プロジェクトでは、パッケージ化に distutils
または setuptools
ユーティリティーを使用し、setup.py
ファイルでパッケージ情報を定義していました。ただし、ネイティブ Python パッケージ作成の可能性は、時間の経過とともに進化しています。
-
setup.py
ファイルを使用する Python ソフトウェアをパッケージ化するには、このドキュメントに従ってください。 -
pyproject.toml
ファイルを使用してより新しいパッケージをパッケージ化するには、pyproject-rpm-macros のREADME
ファイルを参照してください。pyproject-rpm-macros
は、サポート対象外のパッケージを含む CodeReady Linux Builder (CRB) リポジトリーに含まれており、より新しい Python パッケージング標準への対応のために時間の経過とともに変更される可能性があることに注意してください。
5.1. Python パッケージの例に対する spec ファイルの説明 リンクのコピーリンクがクリップボードにコピーされました!
Python プロジェクトの RPM spec
ファイルには、非 Python RPM spec
ファイルと比較していくつかの詳細があります。
Python ライブラリーの RPM パッケージ名には必ず python3-
接頭辞を含めることを推奨します。
次の python3-pello
パッケージの例で、Python RPM spec
ファイルの詳細に関する注記を参照してください。
Python で書かれた pello プログラムの SPEC ファイルサンプル
- 1
python3_pkgversion
マクロを定義することで、このパッケージがビルドされる Python バージョンを設定します。デフォルトの Python バージョン3.12
用にビルドするには、行を削除します。- 2
- Python プロジェクトを RPM にパッケージ化するときは、常に
python-
接頭辞をプロジェクトの元の名前に追加してください。ここでは元の名前がPello
であるため、ソース RPM (SRPM) の名前はpython-pello
になります。 - 3
BuildRequires
は、このパッケージのビルドおよびテストに必要なパッケージを指定します。BuildRequires
には、Python パッケージのビルドに必要なツールを提供するアイテムpython3-devel
と、パッケージ化する特定のソフトウェアに必要な関連プロジェクト (python3-setuptools
、または%check
セクションでテストを実行するのに必要なランタイムとテストの依存関係) を常に含めます。- 4
- バイナリー RPM (ユーザーがインストールできるパッケージ) の名前を選択する際には、バージョン管理された Python 接頭辞を追加します。デフォルトの Python 3.12 の場合は、
python3-
接頭辞を使用します。%{python3_pkgversion}
マクロを使用できます。このマクロは、デフォルトの Python バージョン3.12
に対して3
と評価されます。ただし、たとえば、より新しいバージョンの Python が利用可能な場合など、明示的にバージョンを指定すればその値に設定されます (脚注 1 を参照)。 - 5
%py3_build
マクロおよび%py3_install
マクロは、インストール場所、使用するインタープリター、その他の詳細を指定する追加の引数を使用して、setup.py build
コマンドおよびsetup.py install
コマンドをそれぞれ実行します。注記setuptools
パッケージのsetup.py build
コマンドとsetup.py install
コマンドの使用は非推奨となり、今後の RHEL メジャーリリースでは削除される予定です。代わりに pyproject-rpm-macros を使用できます。- 6
%check
セクションでは、パッケージ化されたプロジェクトのテストを実行します。正確なコマンドはプロジェクト自体によって異なりますが、%pytest
マクロを使用して、RPM に適した方法でpytest
コマンドを実行できます。