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
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.
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!
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
目录并将源码放入其中。
现在你已经验证过 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
通常情况下我们并不需要将 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!