ホームページ  >  記事  >  バックエンド開発  >  新しい Python モジュールをすばやくパッケージ化する方法

新しい Python モジュールをすばやくパッケージ化する方法

WBOY
WBOY転載
2023-05-09 13:13:071845ブラウズ

アプリケーションをインストールするときは、通常、アプリケーションの実行可能コードと、ドキュメント、アイコンなどの重要なファイルを含むソフトウェア パッケージをインストールすることになります。 Linux では、ソフトウェアは通常、RPM や DEB などの形式にパッケージ化されています。ユーザーは、使用している Linux ディストリビューションに応じて、dnfapt などのコマンドを使用してソフトウェアをインストールできます。ただし、新しい 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

1. スペック ファイルを生成します

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.

2. rpmlint を実行します

仕様ファイルが標準に準拠していることを確認するには、ファイルに対して 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.

成功しました。

3. ソース コードをダウンロードする

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 ディレクトリが作成され、そこにソース コードが配置されます。

4. ソース ソフトウェア パッケージをビルドする

仕様ファイルを確認したので、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*rpm

PyPi を使用しないのはなぜですか?

通常、Python モジュールを RPM パッケージにパッケージ化する必要はありません。 PyPi を介してモジュールをインストールすることもできますが、PyPi はモジュールをチェックして更新するために追加のパッケージ マネージャーをインストールします。

dnf を使用して RPM パッケージをインストールすると、インストールの完了時に完全なインストール リストを取得できます。 pyp2rpm を使用すると、このプロセスは高速かつ簡単で自動化されます。

以上が新しい Python モジュールをすばやくパッケージ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。