アプリケーションをインストールするときは、通常、アプリケーションの実行可能コードと、ドキュメント、アイコンなどの重要なファイルを含むソフトウェア パッケージをインストールすることになります。 Linux では、ソフトウェアは通常、RPM や DEB などの形式にパッケージ化されています。ユーザーは、使用している Linux ディストリビューションに応じて、dnf
や apt
などのコマンドを使用してソフトウェアをインストールできます。ただし、新しい Python モジュールはほぼ毎日リリースされるため、まだパッケージ化されていない Python モジュールに遭遇することは簡単です。これが pyp2rpm
の存在意味です。
最近、python-concentration
というモジュールをインストールしようとしましたが、進捗があまりスムーズではありませんでした:
$ sudo dnf install python-concentration Updating Subscription Management repositories. Last metadata expiration check: 1:23:32 ago on Sat 11 Jun 2022 06:37:25. No match for argument: python-concentration Error: Unable to find a match: python-concentration
これは PyPi で公開されているパッケージですが、まだ RPM パッケージにパッケージ化できません。幸いなことに、pyp2rpm
を使用する比較的簡単なプロセスで、これを RPM パッケージにパッケージ化できるということです。
最初に 2 つのディレクトリを設定する必要があります:
$ mkdir rpmbuild $ cd rpmbuild && mkdir SPECS
次のようにインストールします pyp2rpm
:
$ sudo dnf install pyp2rpm
RPM パッケージの基礎はスペック ファイルです。このファイルには、必要な依存関係、アプリケーションのバージョン番号、インストールされているファイル、その他の情報など、このパッケージの作成に必要なすべての情報が含まれています。 Python モジュールを指定すると、pyp2rpm
はその仕様ファイルを構築します。これを使用して RPM パッケージを作成できます。
以下では、仕様ファイルを構築する方法を示す例として python-concentration
を使用します:
$ pyp2rpm concentration > ~/rpmbuild/SPECS/concentration.spec
以下は、生成されるファイルです:
# Created by pyp2rpm-3.3.8 %global pypi_name concentration %global pypi_version 1.1.5 Name: python-%{pypi_name} Version:%{pypi_version} Release:1%{?dist} Summary:Get work done when you need to, goof off when you don't License:None URL:None Source0:%{pypi_source} BuildArch:noarch BuildRequires:python3-devel BuildRequires:python3dist(setuptools) %description Concentration [![PyPI version]( [![Test Status]( [![Lint Status]( [![codecov]( %package -n python3-%{pypi_name} Summary:%{summary} %{?python_provide:%python_provide python3-%{pypi_name}} Requires: (python3dist(hug) >= 2.6.1 with python3dist(hug) < 3~~) Requires: python3dist(setuptools) %description -n python3-%{pypi_name} Concentration [![PyPI version]( [![Test Status]( [![Lint Status]( [![codecov]( %prep %autosetup -n %{pypi_name}-%{pypi_version} %build %py3_build %install %py3_install %files -n python3-%{pypi_name} %license LICENSE %doc README.md %{_bindir}/concentration %{python3_sitelib}/%{pypi_name} %{python3_sitelib}/%{pypi_name}-%{pypi_version}-py%{python3_version}.egg-info %changelog *- 1.1.5-1 - Initial package.
仕様ファイルが標準に準拠していることを確認するには、ファイルに対して rpmlint
コマンドを使用する必要があります:
$ rpmlint ~/rpmbuild/SPEC/concentration.spec error: bad date in %changelog: - 1.1.5-1 0 packages and 1 specfiles checked; 0 errors, 0 warnings.
変更ログ (%changelog
) が必要です。日付を記録します。
%changelog * Sat Jun 11 2022 Tux- 1.1.5-1
rpmint
を再度実行します:
$ rpmlint ~/rpmbuild/SPEC/concentration.spec 0 packages and 1 specfiles checked; 0 errors, 0 warnings.
成功しました。
RPM パッケージをさらに構築するには、パッケージ化されたコードをダウンロードする必要があります。簡単な方法は、仕様ファイルを解析してソース コードの URL を取得することです。
まず、dnf
を通じて spectool
をインストールします:
$ sudo dnf install spectool
次に、spectool
:
$ cd ~/rpmbuild $ spectool -g -R SPEC/concentration.spec Downloading: https://files.pythonhosted.org/...concentration-1.1.5.tar.gz 6.0 KiB / 6.0 KiB[=====================================] Downloaded: concentration-1.1.5.tar.gzを通じてソース コードをダウンロードします。
これにより、SOURCES
ディレクトリが作成され、そこにソース コードが配置されます。
仕様ファイルを確認したので、rpmbuild
を使用してソース ソフトウェア パッケージをビルドできます。 rpmbuild
をインストールしていない場合は、dnf
経由 (または rpmbuild# を使用する場合はターミナルから)
rpm-build パッケージをインストールすることもできます。 ## インストール用のコマンド プロンプト)。
-bs はビルド ソース パッケージを表します。このパラメータを追加すると、特定のアーキテクチャ向けに再構築するための汎用パッケージである src.rpm ファイルが生成されます:
$ rpmbuild -bs SPECS/concentration.spec Wrote: ~/rpmbuild/SRPMS/python-concentration-1.1.5-1.el9.src.rpmシステムにインストール可能な RPM ファイルを構築します:
$ rpmbuild –rebuild SRPMS/python-concentration-1.1.5-1.el9.src.rpm error: Failed build dependencies: python3-devel is needed by python-concentration-1.1.5-1.el9.noarchこれのようですパッケージのビルドを続行するには、Python 開発ライブラリをインストールする必要があります。構築を続けるには、これらをインストールしてください。今度は、ビルドが成功し、さらに出力が表示されます (わかりやすくするために、ここでは出力を省略しています):
$ sudo dnf install python3-devel -y $ rpmbuild –rebuild SRPMS/python-concentration-1.1.5-1.el9.src.rpm [...] Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.TYA7l2 + umask 022 + cd /home/bogus/rpmbuild/BUILD + rm -rf concentration-1.1.5 + RPM_EC=0 ++ jobs -p + exit 0これで、RPM パッケージが
RPMS サブルーチン ディレクトリにビルドされます。
dnf を実行して通常どおりインストールします。
$ sudo dnf install RPMS/noarch/python3-concentration*rpmPyPi を使用しないのはなぜですか? 通常、Python モジュールを RPM パッケージにパッケージ化する必要はありません。 PyPi を介してモジュールをインストールすることもできますが、PyPi はモジュールをチェックして更新するために追加のパッケージ マネージャーをインストールします。
dnf を使用して RPM パッケージをインストールすると、インストールの完了時に完全なインストール リストを取得できます。
pyp2rpm を使用すると、このプロセスは高速かつ簡単で自動化されます。
以上が新しい Python モジュールをすばやくパッケージ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。