第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コマンドを実行できます。