Heim > Artikel > Backend-Entwicklung > Vier Schritte zum Packen eines neuen Python-Moduls
Wenn Sie eine Anwendung installieren, installieren Sie normalerweise ein Softwarepaket, das den ausführbaren Code der Anwendung und wichtige Dateien wie Dokumente, Symbole usw. enthält. Unter Linux wird Software im Allgemeinen in Formate wie RPM oder DEB gepackt. Benutzer müssen nur dnf
=" Schriftfamilie: Monospace; Schriftgröße: 12 Pixel; Hintergrundfarbe: RGBA (0, 0, 0, 0,06); Polsterung: 0 Pixel 2 Pixel; Randradius: 6 Pixel; Zeilenhöhe: erben; Überlaufumbruch: break-word; text-indent: 0px;">apt und andere Befehle können je nach verwendeter Linux-Distribution installiert werden. Allerdings werden fast täglich neue Python-Module veröffentlicht, sodass es leicht ist, auf ein Python-Modul zu stoßen, das noch nicht gepackt wurde. Dies ist pyp2rpm
Die Bedeutung der Existenz. dnf
或者 apt
等命令就可以进行安装了,这取决于你使用的 Linux 发行版。然而几乎每天都有新的 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 包。
首先你需要设置两个目录:
$ mkdir rpmbuild $ cd rpmbuild && mkdir SPECS
像这样去安装 pyp2rpm
:
$ sudo dnf install pyp2rpm
RPM 包的基础是一种 spec 文件,这个文件包含你创建这个包的所有信息,如所需的依赖关系、应用的版本号、安装的文件等信息。当指向某个 Python 模块时,pyp2rpm
会为它构建一个 spec 文件,你可以用它来创建 RPM 包。
下面以 python-concentration
为例演示如何构建一个 spec 文件:
$ 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.
为了确保 spec 文件符合标准,你需要对文件使用 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 <tux@example.com> - 1.1.5-1
再次运行 rpmint
:
$ rpmlint ~/rpmbuild/SPEC/concentration.spec 0 packages and 1 specfiles checked; 0 errors, 0 warnings.
成功!
你需要下载好打包的代码才能进一步构建 RPM 包。一种简单的方式是解析你的 spec 文件以获取源码的网址。
首先,通过 dnf
安装 spectool
python-concentration
module, but the progress is not sehr glatt: #🎜🎜#$ sudo dnf install spectool#🎜🎜#Obwohl dies ein auf PyPi veröffentlichtes Paket ist, kann es immer noch nicht in ein RPM-Paket gepackt werden. Die gute Nachricht ist, dass Sie Folgendes verwenden können: 6px; line-height: inherit; overflow-wrap: break-word;">pyp2rpm Packen Sie es in einem relativ einfachen Prozess. #🎜🎜##🎜🎜#Zuerst müssen Sie zwei Verzeichnisse einrichten: #🎜🎜#
$ 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#🎜🎜# Installation wie folgt
pyp2rpm Code>:#🎜🎜#<pre class="brush:bash;toolbar:false;">$ rpmbuild -bs SPECS/concentration.spec
Wrote: ~/rpmbuild/SRPMS/python-concentration-1.1.5-1.el9.src.rpm</pre><h3>1. Spezifikationsdatei generieren</h3>#🎜🎜#Die Basis des RPM-Pakets ist eine Spezifikationsdatei, die alle Informationen enthält, die Sie zum Erstellen dieses Pakets benötigen Erforderliche Abhängigkeiten, Anwendungsversionsnummer, installierte Dateien und andere Informationen. Wenn Sie auf ein Python-Modul zeigen, <code style="font-family: monospace; font-size: 12px; background-color: rgba(0, 0, 0, 0.06); padding: 0px 2px; border-radius: 6px ; line-height: inherit; overflow-wrap: break-word; text-indent: 0px;">pyp2rpm
erstellt eine Spezifikationsdatei, die Sie zum Erstellen von RPM-Paketen verwenden können. #🎜🎜##🎜🎜#Das Folgende ist python-concentration
Nehmen Sie als Beispiel, wie eine Spezifikationsdatei erstellt wird: #🎜 🎜#$ 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#🎜🎜#Die folgende Datei wird generiert: #🎜🎜#
$ 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
rpmlint
Befehl: #🎜🎜#$ sudo dnf install RPMS/noarch/python3-concentration*rpm#🎜🎜#Sieht aus wie Update-Protokoll (
%changelog
) muss das Datum aufzeichnen. #🎜🎜#rrreee#🎜🎜#Erneut ausführen rpmint
: #🎜🎜#rrreee#🎜🎜#Success! #🎜🎜#dnf
Installation 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
之后,这个过程就变得快速、简单且自动化了。
Das obige ist der detaillierte Inhalt vonVier Schritte zum Packen eines neuen Python-Moduls. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!