Rumah >pembangunan bahagian belakang >Tutorial Python >Empat langkah untuk membungkus modul Python baharu

Empat langkah untuk membungkus modul Python baharu

王林
王林ke hadapan
2023-04-12 13:34:131476semak imbas

Empat langkah untuk membungkus modul Python baharu

Apabila anda memasang aplikasi, anda biasanya memasang pakej perisian yang mengandungi kod boleh laku aplikasi dan fail penting seperti dokumen, ikon, dsb. Pada Linux, perisian biasanya dibungkus ke dalam format seperti RPM atau DEB Pengguna boleh memasangnya melalui arahan seperti ​​dnf​​​ atau ​​apt​​​, bergantung pada pengedaran Linux yang anda gunakan. Walau bagaimanapun, modul Python baharu dikeluarkan hampir setiap hari, jadi mudah untuk menemui modul Python yang belum dibungkus lagi. Inilah makna ​​pyp2rpm​​ kewujudan.

Baru-baru ini saya cuba memasang modul yang dipanggil ​​python-concentration​​, tetapi ia tidak berjalan lancar:

$ 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

Walaupun ini adalah pakej yang diterbitkan di PyPi, ia masih Tidak boleh dibungkus ke dalam pakej RPM. Berita baiknya ialah anda boleh membungkusnya ke dalam pakej RPM dalam proses yang agak mudah menggunakan ​​pyp2rpm​​.

Mula-mula anda perlu menyediakan dua direktori:

$ mkdir rpmbuild
$ cd rpmbuild && mkdir SPECS

Pasang seperti ini ​​pyp2rpm​​:

$ sudo dnf install pyp2rpm

Jana fail spesifikasi

Asas pakej RPM ialah fail spesifikasi Fail ini mengandungi semua maklumat yang anda perlukan untuk membuat pakej ini, seperti kebergantungan yang diperlukan, nombor versi aplikasi, fail yang dipasang dan maklumat lain. Apabila menunjuk ke modul Python, ​​pyp2rpm​​ akan membina fail spesifikasi untuknya, yang boleh anda gunakan untuk membuat pakej RPM.

Berikut mengambil ​​python-concentration​​ sebagai contoh untuk menunjukkan cara membina fail spec:

$ pyp2rpm concentration > ~/rpmbuild/SPECS/concentration.spec

Berikut ialah fail yang dijana:

# 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. Jalankan rpmlint

Untuk memastikan fail spesifikasi mematuhi standard, anda perlu menggunakan arahan ​​rpmlint​​ pada fail:

$ rpmlint ~/rpmbuild/SPEC/concentration.spec
error: bad date in %changelog: - 1.1.5-1
0 packages and 1 specfiles checked; 0 errors, 0 warnings.

Nampaknya log kemas kini (​​%changelog​​) perlu merekod tarikh.

%changelog
* Sat Jun 11 2022 Tux <tux@example.com> - 1.1.5-1

Lari semula ​​rpmint​​:

$ rpmlint ~/rpmbuild/SPEC/concentration.spec
0 packages and 1 specfiles checked; 0 errors, 0 warnings.

Berjaya!

3. Muat turun kod sumber

Anda perlu memuat turun kod berpakej untuk membina pakej RPM lagi. Cara mudah ialah menghuraikan fail spec anda untuk mendapatkan URL kod sumber.

Mula-mula, pasang melalui ​​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、构建源软件包

现在你已经验证过 spec 文件了,接下来就可以通过 ​​rpmbuild​​​ 构建源软件包了。如果你还没有安装 ​​rpmbuild​​​,你也可以通过 ​​dnf​​​ 安装 ​​rpm-build​​​ 包(或者在使用 ​​rpmbuild​​ 命令时根据终端的的提示进行安装)。

参数 ​​-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​​ 之后,这个过程就变得快速、简单且自动化了。

Atas ialah kandungan terperinci Empat langkah untuk membungkus modul Python baharu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam