16.4. Python 3 RPM のパッケージ化
ほとんどの Python プロジェクトは、パッケージ化に Setuptools を使用して、setup.py ファイルにパッケージ情報を定義します。Setuptools パッケージ化の詳細は Setuptools ドキュメント を参照してください。
Python プロジェクトを RPM パッケージにパッケージ化することもできます。これには、Setuptools パッケージ化と比較して以下の利点があります。
- その他の RPM のパッケージの依存関係の指定 (Python 以外も含む)
電子署名
電子署名を使用すると、RPM パッケージの内容は、オペレーティングシステムのその他の部分とともに検証、統合、およびテストできます。
16.4.1. Python パッケージの spec ファイルの説明 リンクのコピーリンクがクリップボードにコピーされました!
spec ファイルには、rpmbuild ユーティリティーが RPM パッケージを作成する際に使用する指示を記述します。指示は一連のセクションに記述します。spec ファイルには、次の 2 つの主要な部分があります。各部分に複数のセクションを定義します。
- Preamble (Body で使用される一連のメタデータ項目を記述)
- Body (指示の主要部分を記述)
Python プロジェクトの RPM SPEC ファイルには、非 Python RPM SPEC ファイルと比較していくつかの詳細があります。特に重要なのは、Python ライブラリーの RPM パッケージの名前には、必ずバージョンを示すプレフィックスを含める必要があるということです。たとえば、Python 3.11 の場合は python3.11、Python 3.12 の場合は python3.12 となります。
その他の詳細は、次の spec ファイルの python3-detox パッケージの例 に記載されています。その詳細の説明は、例の下に記載されている注意事項を参照してください。
%global modname detox
Name: python3-detox
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
BuildRequires: python3-setuptools
BuildRequires: python36-rpm-macros
BuildRequires: python3-six
BuildRequires: python3-tox
BuildRequires: python3-py
BuildRequires: python3-eventlet
%?python_enable_dependency_generator
%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
%install
%py3_install
%check
%{__python3} setup.py test
%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など) が含まれます。リテラルパスではなく、マクロを使用することが常に推奨されます。