19.4. Python 3 RPM のパッケージ化
ほとんどの Python プロジェクトは、パッケージ化に Setuptools を使用して、setup.py
ファイルにパッケージ情報を定義します。Setuptools パッケージ化の詳細は Setuptools ドキュメント を参照してください。
Python プロジェクトを RPM パッケージにパッケージ化することもできます。これには、Setuptools パッケージ化と比較して以下の利点があります。
- その他の RPM のパッケージの依存関係の指定 (Python 以外も含む)
電子署名
電子署名を使用すると、RPM パッケージの内容は、オペレーティングシステムのその他の部分とともに検証、統合、およびテストできます。
19.4.1. Python パッケージ用の SPEC ファイルの説明
SPEC ファイルには、RPM のビルドに rpmbuild
ユーティリティーを使用する命令が含まれています。命令は、一連のセクションに含まれています。SPEC ファイルには、セクションが定義されている 2 つの主要部分があります。
- プリアンブル (ボディーに使用されている一連のメタデータ項目が含まれています)
- ボディー (命令の主要部分が含まれています)
Python プロジェクトの RPM SPEC ファイルには、非 Python RPM SPEC ファイルと比較していくつかの詳細があります。特に注目すべきは、Python ライブラリーの RPM パッケージ名に、Python 3.6 の場合は python3
、Python 3.8 の場合は python38
、Python 3.9 の場合は python39
、Python 3.11 の場合は python3.11
など、バージョンを判別する接頭辞を常に含める必要があります。
その他の詳細は、次の SPEC ファイルの python3-detox パッケージの例
に記載されています。その詳細の説明は、例の下に記載されている注意事項を参照してください。
%global modname detox 1 Name: python3-detox 2 Version: 0.12 Release: 4%{?dist} Summary: Distributing activities of the tox tool License: MIT URL: https://pypi.io/project/detox Source0: https://pypi.io/packages/source/d/%{modname}/%{modname}-%{version}.tar.gz BuildArch: noarch BuildRequires: python36-devel 3 BuildRequires: python3-setuptools BuildRequires: python36-rpm-macros BuildRequires: python3-six BuildRequires: python3-tox BuildRequires: python3-py BuildRequires: python3-eventlet %?python_enable_dependency_generator 4 %description Detox is the distributed version of the tox python testing tool. It makes efficient use of multiple CPUs by running all possible activities in parallel. Detox has the same options and configuration that tox has, so after installation you can run it in the same way and with the same options that you use for tox. $ detox %prep %autosetup -n %{modname}-%{version} %build %py3_build 5 %install %py3_install %check %{__python3} setup.py test 6 %files -n python3-%{modname} %doc CHANGELOG %license LICENSE %{_bindir}/detox %{python3_sitelib}/%{modname}/ %{python3_sitelib}/%{modname}-%{version}* %changelog ...
- 1
- modname マクロには、Python プロジェクトの名前が含まれます。この例では
detox
となります。 - 2
- Python プロジェクトを RPM にパッケージ化する場合は、常にプロジェクトの元の名前に接頭辞
python3
を追加する必要があります。ここでの元の名前はdetox
で、RPM の名前 はpython3-detox
です。 - 3
- BuildRequires は、このパッケージのビルドおよびテストに必要なパッケージを指定します。BuildRequires では、Python パッケージをビルドするのに必要なツールを提供する項目 (
python36-devel
およびpython3-setuptools
) が常に含まれます。/usr/bin/python3
インタープリターディレクティブを持つファイルが自動的に/usr/bin/python3.6
に変更されるように、python36-rpm-macros
パッケージが必要です。 - 4
- すべての Python パッケージが正しく動作するためには、その他のパッケージがいくつか必要です。このようなパッケージも、SPEC ファイルで指定する必要があります。依存関係を指定するには、%python_enable_dependency_generator マクロを使用して、
setup.py
ファイルに定義した依存関係を自動的に使用できます。パッケージに、Setuptools で指定していない依存関係がある場合は、追加のRequires
ディレクティブ内に指定します。 - 5
- %py3_build マクロおよび %py3_install マクロは、
setup.py build
コマンドおよびsetup.py install
コマンドを実行します。それぞれには、インストール場所、使用するインタープリター、その他の詳細を指定する引数を用います。 - 6
- check セクションは、Python の正しいバージョンを実行するマクロを提供します。%{__python3} マクロには、Python 3 インタープリターのパス (
/usr/bin/python3
など) が含まれます。リテラルパスではなく、マクロを使用することが常に推奨されます。
19.4.2. Python 3 RPM の一般的なマクロ
SPEC ファイルでは、値をハードコーディングするのではなく、以下の Python 3 RPM のマクロ
の表で説明されているマクロを常に使用します。
マクロ名では、バージョンを指定しない python
ではなく、python3
または python2
を使用してください。SPEC ファイルの BuildRequires セクションで特定の Python 3 バージョンを python36-rpm-macros、python38-rpm-macros、python39-rpm-macros
、または python3.11-rpm-macros
に設定します。
マクロ | 一般的な定義 | 説明 |
---|---|---|
%{__python3} | /usr/bin/python3 | Python 3 のインタープリター |
%{python3_version} | 3.6 | Python 3 インタープリターのフルバージョン |
%{python3_sitelib} | /usr/lib/python3.6/site-packages | pure-Python モジュールのインストール先 |
%{python3_sitearch} | /usr/lib64/python3.6/site-packages | アーキテクチャー固有の拡張を含むモジュールがインストールされている場合 |
%py3_build |
システムパッケージに適した引数で | |
%py3_install |
システムパッケージに適した引数で |
19.4.3. Python RPM の自動 Provides
Python プロジェクトをパッケージ化する際、以下のディレクトリーが存在する場合は、作成される RPM に以下のディレクトリーが含まれていることを確認してください。
-
.dist-info
-
.egg-info
-
.egg-link
このディレクトリーから、RPM ビルドプロセスは自動的に仮想 pythonX.Ydist
Provides (python3.6dist(detox)
など) を生成します。この仮想 Provides は、%python_enable_dependency_generator マクロにより指定されるパッケージにより提供されます。