第 5 章 打包 Python 3 RPM
您可以使用 DNF 软件包管理器在系统上安装 Python 软件包。DNF 使用 RPM 软件包格式,它提供对软件的下游控制。
与原生 Python 软件包相比,将 Python 项目打包成 RPM 软件包提供了以下优点:
- 可以对 Python 和非 Python 软件包的依赖项,并严格由 DNF 软件包管理器强制执行。
- 您可以用加密的方式为软件包签名。使用加密签名,您可以验证、集成和测试 RPM 软件包的内容以及操作系统的其余部分。
- 您可以在构建过程中执行测试。
原生 Python 软件包的打包格式由 Python Packaging Authority (PyPA) 规范定义。历史上,大多数 Python 项目使用 distutils 或 setuptools 工具打包,并在 setup.py 文件中定义软件包信息。但是,创建原生 Python 软件包可能性随着时间而演变:
-
要打包使用
setup.py文件的 Python 软件,请按照此文档操作。 -
要使用
pyproject.toml文件打包更现代的软件包,请参阅 pyproject-rpm-macros 中的README文件。请注意,pyproject-rpm-macros包含在 CodeReady Linux Builder (CRB)存储库中,该存储库包含不受支持的软件包,其可能会随着时间的变化而改变,来支持较新的 Python 打包标准。
5.1. 示例 Python 软件包的 spec 文件描述 复制链接链接已复制到粘贴板!
与非 Python RPM spec 文件相比,Python 项目的 RPM spec 文件有一些具体信息。
请注意,建议任何 Python 库的 RPM 软件包名称包含 python3- 前缀。
请参阅以下 python3-pello 软件包示例中的有关 Python RPM spec 文件的备注。
使用 Python 编写的 pello 程序的 SPEC 文件示例
- 1
- 通过定义
python3_pkgversion宏,您可以设置将为哪个 Python 版本构建此软件包。要为默认的 Python 版本3.12进行构建,请删除该行。 - 2
- 将 Python 项目打包到 RPM 中时,需要将
python-前缀添加到项目的原始名称中。这里的项目名称是Pello,因此源 RPM (SRPM)的名称是python-pello。 - 3
BuildRequires指定了构建和测试此软件包所需的软件包。在BuildRequires中,始终包括构建 Python 软件包所需的工具:python3-devel以及您的软件包,如python3-setuptools或要在%check部分中运行测试所需的运行时和测试依赖项的特定软件所需的相关项目。- 4
- 当为二进制 RPM 选择名称(用户必须安装的软件包)时,请添加版本化的 Python 前缀。对默认的 Python 3.12 使用
python3-前缀。您可以使用%{python3_pkgversion}宏,对于默认的 Python 版本3.12其评估为3,除非您将其设置为明确的版本,例如,当有较新版本的 Python 可用时(请参阅脚注 1)。 - 5
%py3_build和%py3_install宏会分别运行setup.py build和setup.py install命令,使用附加参数来指定安装位置、要使用的解释器以及其他详情。注意使用
setuptools软件包中的setup.py build和setup.py install命令已弃用,并将在以后的主 RHEL 发行版本中删除。您可以改为使用 pyproject-rpm-macros 。- 6
%check部分运行打包项目的测试。确切的命令取决于项目本身,但您可以使用%pytest宏以 RPM 友好的方式运行pytest命令。