rpmbuild如何打包python程序?,python如何制作rpm包?

使用 rpmbuild 打包 Python 项目指南

在 RHEL、CentOS、Fedora 等基于 RPM 的 Linux 发行版中,将 Python 项目打包为 RPM 格式是进行系统级分发和管理的标准方式,随着 Python 生态的发展,现代的打包方式推荐使用 pyproject-rpm-macros,它能够更好地兼容 PEP 517/518 标准。

准备工作

在开始打包之前,你需要安装必要的构建工具和环境:

[Kivy 打包环境配置]-把python打包成安卓应用就是如此的简单。 kivy打包opencv
加载中
[Kivy 打包环境配置]-把python打包成安卓应用就是如此的简单。 kivy打包opencv
  • 安装基础构建工具:
    sudo dnf install rpm-build rpmdevtools python3-rpm-generators python3-pip
  • 初始化 RPM 构建目录结构:
    rpmdev-setuptree

    执行后,会在用户主目录下生成 rpmbuild 目录,包含 SPECS, SOURCES, BUILD, RPMS, SRPMS 等子目录。

核心概念:.spec 文件

.spec 文件是 rpmbuild 的核心,它定义了软件包的元数据、依赖关系以及构建和安装步骤,对于 Python 项目,现代 .spec 文件应利用宏来简化流程。

rpmbuild如何打包python程序?,python如何制作rpm包?

构建步骤

第一步:准备源代码

将你的 Python 项目代码(包含 pyproject.toml 或 setup.py)打包成 .tar.gz 文件,并放置到 ~/rpmbuild/SOURCES/ 目录下。

第二步:编写 .spec 文件

在 ~/rpmbuild/SPECS/ 目录下创建一个 .spec 文件(python-myapp.spec)。

以下是一个使用现代 Python 宏的模板:

Name:           python-myapp
Version:        1.0.0
Release:        1%{?dist}
Summary:        示例 Python 项目
License:        MIT
URL:            https://example.com/myapp
Source0:        %{name}-%{version}.tar.gz
BuildRequires:  python3-devel
BuildRequires:  python3-pip
BuildRequires:  python3-setuptools
BuildRequires:  python3-wheel
# 自动生成构建依赖
BuildRequires:  pyproject-rpm-macros
%description
这是一个使用 rpmbuild 打包的 Python 示例项目。
%prep
%autosetup -n %{name}-%{version}
%build
# 构建 wheel
%pyproject_wheel
%install
# 安装 wheel
%pyproject_install
%files
%license LICENSE
%doc README.md
%{python3_sitelib}/myapp/
%{_bindir}/myapp-cli
%changelog
 Mon Oct 23 2026 Your Name <you@example.com> - 1.0.0-1
- Initial package

rpmbuild如何打包python程序?,python如何制作rpm包?

关键宏说明

  • %pyproject_wheel: 自动调用 pip wheel 或构建后端来生成 .whl 文件。
  • %pyproject_install: 自动将生成的 .whl 文件安装到构建根目录中,并处理依赖关系。
  • %{python3_sitelib}: 这是一个预定义的宏,指向 Python 3 的第三方库安装路径(通常是 /usr/lib/python3.x/site-packages)。

执行构建

在 SPECS 目录下运行以下命令开始构建:

rpmbuild -ba python-myapp.spec
  • -ba: 表示构建二进制包(Binary)和源代码包(Source)。
  • 构建完成后,生成的 .rpm 文件位于 ~/rpmbuild/RPMS/ 目录下,生成的源代码包位于 ~/rpmbuild/SRPMS/ 目录下。

注意事项与最佳实践

rpmbuild如何打包python程序?,python如何制作rpm包?

  • 依赖管理: 尽量使用 BuildRequires 显式声明构建依赖,对于运行时的 Python 依赖,pyproject-rpm-macros 通常会自动处理,但建议在安装后进行测试。
  • 命名规范: RPM 包名应遵循 python3-<项目名> 的命名规范。
  • 避免打包虚拟环境: 不要将 venv 或 virtualenv 打包进 RPM,RPM 应该安装到系统的 Python 路径中,或者使用 python3-virtualenv 宏进行隔离安装。
  • 测试: 在构建完成后,务必在干净的容器或虚拟机中使用 dnf install ./path/to/package.rpm 进行安装测试,确保所有依赖项都能正确解析。
  • 安全性: 确保在 %install 阶段正确处理文件权限,避免将敏感文件打包进去。

通过使用现代的 pyproject-rpm-macros,你可以极大地减少手动编写构建脚本的工作量,并确保打包过程符合当前的 Python 打包标准。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/rpmbuild%e5%a6%82%e4%bd%95%e6%89%93%e5%8c%85python%e7%a8%8b%e5%ba%8f%ef%bc%9f%ef%bc%8cpython%e5%a6%82%e4%bd%95%e5%88%b6%e4%bd%9crpm%e5%8c%85%ef%bc%9f/

赞 (0)
Python如何实现RPC,Python RPC框架有哪些?
上一篇 2026年7月12日 18:22
Linux怎么彻底移除MySQL,Linux卸载MySQL后如何清理残留?
下一篇 2026年7月12日 18:22

相关推荐

  • 服务器控件设置滚动条,服务器控件如何添加滚动条

    服务器控件设置滚动条的核心在于精准控制容器的溢出属性与定位机制,通过CSS样式与后台逻辑的协同配合,实现跨浏览器的稳定视觉效果与交互体验,这一过程并非单纯的前端样式调整,而是涉及HTML渲染规则、DOM结构层级以及服务器端状态保持的综合技术实践,核心结论是:高效的滚动条设置必须遵循“容器约束优先、样式渲染分离……

    2026年3月11日
    12400
  • 常见的web服务器错误码有哪些,如何解决

    常见的Web服务器错误码主要分为4xx客户端错误和5xx服务器错误,其中404未找到、403禁止访问、500内部服务器错误、502网关错误、503服务不可用、504网关超时最为典型,理解这些错误码的含义与排查方法是每个站点运维的基本功,HTTP错误码的分类与核心意义HTTP协议为每个响应定义了状态码,从1xx到……

    2026年7月27日
    500
  • 服务器极光推送怎么用,服务器端极光推送如何配置

    在移动互联网应用架构中,实现高效、稳定且实时的消息触达是提升用户留存与活跃度的关键,核心结论在于:构建一套健壮的服务器极光推送体系,不仅依赖于第三方SDK的基础接入,更取决于服务端对API调用的精细化控制、厂商通道的深度优化以及异常处理机制的完善设计,通过在服务端实现精准的推送策略与高并发处理能力,能够确保消息……

    2026年2月18日
    24500
  • 服务器设备厂商有哪些品牌,如何选择性价比高

    传统国际品牌、国产头部厂商、白牌ODM代工厂,以及自建硬件生态的云服务商,选谁不取决于品牌名气,而是取决于采购模式——自购物理设备托管、纯租用IDC机房的物理服务器,还是直接用云服务器,三者对应的厂商名单完全不同,主流服务器厂商梯队分布行业内讨论服务器厂商,常按背景和商业模式来划分,因为服务器不像手机,没有“全……

    服务器运维 2026年9月6日
    300
  • 什么样的服务器最适合做容灾,企业怎么选性价比高?

    在当前的主流业务架构中,真正适合做容灾的服务器,不是单一配置堆料的高性能机型,而是具备冗余架构、可快速切换、且由合规服务商托管的节点组合,你在规划容灾方案时,要先脱离“买一台更好服务器”的惯性思维,转而关注数据复制链路、切换时间(RTO)与数据丢失容忍度(RPO),这几个参数决定了服务器是否称得上“容灾”,容灾……

    2026年8月21日
    1400
  • 为什么单字域名米能卖天价?,域名投资价值有多大?

    花高价买米的人,买的不只是一个网址,而是一个在全球范围内不可复制、最短的品牌标识,域名圈里把“域名”叫作“米”,单字米就是指一个汉字或一个字母组成的域名,比如mi.com、le.com,以及“米.com”这种形式,它是稀缺资源,也是品牌资产,还是一种圈内公认的硬通货,为什么有人花高价购买米这个单字域名?要回答这……

    2026年9月11日
    300
  • Java规则引擎怎么设计?规则引擎java设计实战

    Java规则引擎设计的核心在于将业务逻辑与代码解耦,通过Drools、LiteFlow或自研DSL实现动态配置,从而在应对高频变更时降低维护成本并提升系统扩展性,在传统的Java开发中,业务逻辑往往硬编码在Service层,一旦需求变更,比如调整风控阈值或修改促销折扣算法,开发者必须修改代码、重新编译、测试并部……

    2026年7月7日
    11000
  • 服务器怎么存储的?服务器存储数据原理详解

    服务器存储数据的核心机制并非简单的“存放”,而是一个由文件系统、RAID阵列、分布式架构及备份策略共同构建的精密数据管理体系,服务器存储的本质,是通过物理磁盘的阵列化组合与逻辑层面的系统调度,实现数据的高可用性、高并发读写与灾难恢复能力,理解这一机制,对于企业构建稳定的信息化基础设施至关重要,数据从用户端提交到……

    2026年3月17日
    13600
  • 服务器在哪买靠谱,云服务器购买平台哪家性价比高

    针对服务器选购这一核心需求,核心结论在于:购买服务器的渠道选择必须严格匹配业务场景、技术要求及预算规模,对于绝大多数互联网应用而言,首选阿里云、腾讯云等公有云巨头;对于追求高性价比或特定网络线路(如CN2)的用户,专业IDC服务商是更优解;而对于数据敏感度极高的传统企业,则应考虑物理服务器采购或自建机房,明确自……

    2026年2月17日
    21300
  • Android Studio虚拟机如何时时保持运行?,安卓虚拟机启动失败怎么办

    Android Studio 时时虚拟机并不是独立软件,而是把内置模拟器当作实时调试环境运行,让开发主流程摆脱真机依赖,Android Studio 虚拟机怎么开实时预览?先从运行环境搭起SDK组件要装对很多人以为建个AVD就能跑,其实是SDK工具链没配完整,正确路径如下:顶部菜单进入 File > Se……

    2026年9月15日
    200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注