Empat langkah untuk membungkus modul Python baharu

王林
Lepaskan: 2023-04-12 13:34:13
ke hadapan
1463 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

Pasang seperti ini ​​pyp2rpm​​:

$ sudo dnf install pyp2rpm
Salin selepas log masuk

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
Salin selepas log masuk

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.
Salin selepas log masuk

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.
Salin selepas log masuk

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

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

Lari semula ​​rpmint​​:

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

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
Salin selepas log masuk

然后通过 ​​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
Salin selepas log masuk

这样就创建了一个 ​​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
Salin selepas log masuk

为你的系统构建一个可安装的 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
Salin selepas log masuk

看起来这个包需要安装 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
Salin selepas log masuk

你的 RPM 包现在已经构建在 ​​RPMS​​​ 子目录下,像平常一样使用 ​​dnf​​ 安装它。

$ sudo dnf install RPMS/noarch/python3-concentration*rpm
Salin selepas log masuk

为什么不使用 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!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!