第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-macrosREADME ファイルを参照してください。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 ファイルサンプル

%global python3_pkgversion 3                                          
1


Name:           python-pello                                          
2

Version:        1.0.2
Release:        1%{?dist}
Summary:        Example Python library

License:        MIT
URL:            https://github.com/fedora-python/Pello
Source:         %{url}/archive/v%{version}/Pello-%{version}.tar.gz

BuildArch:      noarch
BuildRequires:  python%{python3_pkgversion}-devel                     
3


# Build dependencies need to be specified manually
BuildRequires:  python%{python3_pkgversion}-setuptools

# Test dependencies need to be specified manually
# Runtime dependencies need to be BuildRequired manually to run tests during build
BuildRequires:  python%{python3_pkgversion}-pytest >= 3


%global _description %{expand:
Pello is an example package with an executable that prints Hello World! on the command line.}

%description %_description

%package -n python%{python3_pkgversion}-pello                         
4

Summary:        %{summary}

%description -n python%{python3_pkgversion}-pello %_description


%prep
%autosetup -p1 -n Pello-%{version}


%build
# The macro only supports projects with setup.py
%py3_build                                                            
5



%install
# The macro only supports projects with setup.py
%py3_install


%check                                                                
6

%pytest


# Note that there is no %%files section for python-pello
%files -n python%{python3_pkgversion}-pello
%doc README.md
%license LICENSE.txt
%{_bindir}/pello_greeting

# The library files needed to be listed manually
%{python3_sitelib}/pello/

# The metadata files needed to be listed manually
%{python3_sitelib}/Pello-*.egg-info/
Copy to Clipboard Toggle word wrap

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 コマンドを実行できます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat