打包 Python RPM

打包 python rpm

最近,我正在为 Red Hat 工作的当前项目中执行一项非常具体的任务,即 RHEL Lightspeed
ShellAI,这个项目相对较新,但我们想开始发货
开发 RPM,让我们的 QE 朋友开始使用该工具并在他们的管道中进行测试。

我知道包装和一般Python东西的方法,但是伙计,我必须告诉你,这个包装任务花了我两个时间
一整天都可以度过。让我快速引导您完成任务的详细信息。

TLDR;最终一切顺利,这就是最终的 PR:https://github.com/rhel-lightspeed/shellai/pull/4

任务详情

命令行助手项目计划在 RHEL 9 和即将推出的 RHEL 10 下发布。

根据上面的陈述,如果您之前已经使用过 RHEL,那么您已经猜到挑战将是
RHEL 中依赖项的版本。

RHEL 9 有 Python 3.9最后,RHEL 10 有 Python 3.12

我们还希望相对频繁地进行开发构建,以便在我们进行测试时测试新功能
开发工具。

对于开发部分,我们希望使用 pdm 来管理我们的依赖项
构建。当我们完成任务时,我们注意到 pdm 后端未在 RHEL 存储库中提供,因此我们
使用默认的 setuptools 构建后端。

由于我们的系统目标“相对较新”,我们希望使项目现代化并确保我们正在使用
新的工具/结构和格式。为此,我们选择使用 pyproject.toml,因为它是通过 pdm init 生成的
当我们启动该项目时。

构建 RPM 时遇到的问题

最初,我们的想法是使用最新的 python 功能和项目结构,例如 pyproject.toml 文件
而不是旧的 setup.py。当你开始一个新项目时,一切都很酷而且很新,你会很兴奋地使用
那个东西,唯一的问题是:

它们非常适合开发过程,但不适合打包。

最初,当我开始任务时,我认为我们可以使用新的 RPM 宏来构建项目,因为我们
使用 pyproject.toml 和 pdm 来管理依赖项。

为此,Fedora 文档有一篇不错的文章,名为 Python Packaging
详细指导方针。当导游
几乎涵盖了您可能需要的所有主题和案例,甚至还有示例
规格文件。

由于我们的主要目标是 RHEL,我们可以想象遵循指南中的所有内容都可以按原样工作,对吗?没有。
其原因在于 RHEL 存储库中提供的版本。即使新的宏指向
该指南可能在构建期间起作用,您将无法在以下目标中生成最终 RPM:

RHEL 9 将能够完成大部分步骤,但会失败 %pyproject_wheel,因为它将构建一个包名字未知。发生这种情况是因为(再次)RHEL 9 下提供的 python3-setuptools 很旧。它无法识别 pyproject.toml 规范生成的大部分元数据。

解决方案

我们必须创造遗产
setup.py 文件以便
Python 轮构建的进展,并避免 pyproject.toml 和我们的旧版本之间的数据重复
setup.py 文件中,我们使用了 tomllib,因为以下原因:

Python 3.11 之后,tomllib 原生捆绑到标准库

正如您在上面所看到的,我们使用 tomllib 加载 pyproject.toml 文件并读取必要的字段,然后简单
更新我们的旧版 setup.py。这样,我们就可以修改 pyproject.toml,并且每当我们推送新版本时,我们都会
也能够在我们的旧版 setup.py 中保持一致性。

关于specfile,我们不得不返回并使用文档中所谓的“201x-era”Python 打包
指导方针。本质上,我们正在使用好的
旧的 python setup.py build … 命令(显然是通过宏)来构建项目。

该解决方案使我们能够在我们想要支持的 RHEL 版本之间保持一致性,同时保持
使用 pdm 和我们希望开发的闪亮新功能。

以上就是打包 Python RPM的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1354589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 18:39:26
下一篇 2025年12月8日 06:49:53

相关推荐

  • python中decimal用法

    Decimal 模块:用于精确十进制数操作。为什么使用 Decimal?精确度:不会出现浮点数舍入误差。可比性:精确比较,避免浮点数比较误差。可转换性:轻松转换为其他数值类型。如何创建 Decimal 对象?从字符串创建:decimal.Decimal(string)从数字创建:decimal.De…

    2025年12月13日
    000
  • 无法从 Companies House 和 HMRC API 获取营业额数据超过英镑的数据

    无法从 Companies House 和 HMRC API 获取营业额数据超过 200 万英镑的数据 2024 年 12 月 4 日 评论:2 答案:0 0 我已经处理这个问题一天了,但在从 hmrc 和 companies house api 获取公司数据时遇到了麻烦。我主要需要营业额超过 10…

    2025年12月13日
    000
  • python中str的用法举例

    Python 中的 str 用于表示字符串,提供多种方法和属性操作和处理字符串。其用法举例包括:创建字符串、连接、复制、切片、查找和替换。str 类还提供有用属性,如长度、大小写、是否全部小写/大写的检查。 Python 中 str 的用法举例 str 是 Python 中用于表示字符串的内置数据类…

    2025年12月13日
    000
  • 1在python中的含义

    Python 中的 1 表示整数一,是 int 数据类型的一个实例,通常用十进制形式表示。它广泛用于算术运算、条件语句和数据结构中,例如:1 + 2 输出为 3,if 1 > 0 输出为 “1 大于 0″,1, 2, 3 输出为 1。 1 在 Python 中的含义 概…

    2025年12月13日
    000
  • python中九九乘法表怎么打

    Python中九九乘法表的实现方式有四种:列表生成式(最简洁);嵌套循环(稍低效);NumPy数组(高级矩阵操作);Pandas数据框(表状结构)。 Python中九九乘法表的实现 1. 列表生成式 最简洁的方式是使用列表生成式: result = [(i * j) for i in range(1…

    2025年12月13日
    000
  • python中//代表什么

    Python 中 // 表示地板除,是一种整数除法,结果为除法商的整数部分。它与标准除法(/)不同,后者始终返回浮点数,即使被除数和除数都是整数。地板除通常用于计算整数商,例如分割数组、求余数绝对值和计算重复次数。 Python 中 // 的含义 在 Python 中,// 表示除法运算的 地板除。…

    2025年12月13日
    000
  • python中grid的用法

    Python 中的 Tkinter 库中的网格小部件用于创建带有规则排列行和列的网格状布局,以便组织和对齐图形元素。要使用网格,可以使用以下步骤:使用 Grid 类创建网格。使用 rowconfigure() 和 columnconfigure() 方法配置行和列的属性。使用 grid() 方法将小…

    2025年12月13日
    000
  • python中/和//的区别

    在 Python 中,/ 和 // 都用于除法,但行为不同:/:浮点除法,返回浮点数结果。//:整数除法,返回整数结果,且总是正数。 Python 中 / 和 // 的区别 在 Python 中,/ 和 // 都是除法运算符,但它们的行为不同。 1. /:浮点除法 / 运算符用于浮点除法,返回一个浮…

    2025年12月13日
    000
  • python中score用法

    score() 函数在 Python NLTK 中用于计算文本的情感得分,介于 -1(负面)和 1(正面)之间。其用法如下:导入 SentiText 类。创建一个 SentiText 对象。使用 score() 方法计算文本的情感得分。 Python 中的 score 用法 score 是 Pyth…

    2025年12月13日
    000
  • 为什么 Spark 慢?

    为什么 spark 慢? 从一个引人注目的标题“spark 为什么这么慢?”开始,值得注意的是,称 spark“慢”可能意味着多种含义。聚合速度慢吗?数据加载?存在不同的情况。此外,“spark”是一个广泛的术语,其性能取决于编程语言和使用上下文等因素。因此,在深入讨论之前,让我们将标题改进得更加精…

    2025年12月13日
    000
  • AoC ‘- 日历史学家歇斯底里(C# 和 Python)#剧透

    今天的挑战非常简单: 第 1 部分:为了解决这个问题,我们必须 根据字符串输入创建 2 个数字列表,按升序排序对于list1中的每个数字,在list2中获取相同的索引,并找到两个数字之间的距离。 然后将距离相加 简单吧。 第 2 部分: 这有点棘手,但我的解决方案的主要概念是: 立即学习“Pytho…

    2025年12月13日
    000
  • 如何使用 Python 抓取 Google 搜索结果

    抓取 google 搜索可提供基本的 serp 分析、seo 优化和数据收集功能。现代抓取工具使这个过程更快、更可靠。 我们的一位社区成员撰写了此博客,作为对 crawlee 博客的贡献。如果您想向 crawlee 博客贡献此类博客,请通过我们的 discord 频道与我们联系。 在本指南中,我们将…

    2025年12月13日 好文分享
    000
  • 爬虫python怎么读

    Python 网页爬取可通过 requests 库获取响应内容,再用 BeautifulSoup 库解析 HTML 结构。首先导入 requests 库发送 HTTP 请求,然后导入 BeautifulSoup 库解析内容,可查找和提取 HTML 元素,从而获取网页内容。requests 库适用于发…

    2025年12月13日
    000
  • python爬虫怎么点按钮

    使用 Seleniumwebdriver 来模拟浏览器操作,通过单击元素的 ID 或 XPath 来点击按钮。步骤包括:安装 Seleniumwebdriver、导入模块、创建 WebDriver 实例、导航到页面、定位按钮(使用 find_element_by_id() 或 find_elemen…

    2025年12月13日
    000
  • python爬虫代码怎么操作

    如何操作 Python 爬虫代码?导入 Python 库(requests、BeautifulSoup);发送 HTTP 请求获得 HTML 代码;解析 HTML 代码形成树形结构;查找所需的 HTML 元素;提取所需的数据;对提取的数据进行处理;输出处理后的数据。 如何操作 Python 爬虫代码…

    2025年12月13日
    000
  • python 怎么验证反爬虫

    Python 中验证反爬虫措施的步骤包括:检查 HTTP 状态码;分析响应头;提取 капча;分析 JavaScript 行为;检查限速机制;使用代理;使用防浏览器检测工具库;人工验证。 如何验证 Python 中的反爬虫措施 在网络爬取过程中,网站通常会实施反爬虫措施来防止滥用或过量爬取。验证反…

    2025年12月13日
    000
  • python爬虫时怎么设置访问时间间隔

    回答:使用 Python 爬虫时,设置访问时间间隔至关重要,以避免服务器过载和封禁。方法如下:导入 time 模块。设置时间间隔(以秒为单位)。访问网页。等待时间间隔。时间间隔的好处包括减少服务器负载、避免封禁和提高爬取效率。最佳间隔取决于流量大小(高流量网站需要较长间隔)。其他注意事项包括网站限制…

    2025年12月13日
    000
  • python爬虫不按顺序怎么办

    解决 Python 爬虫页面抓取无序问题的方法:并行抓取:使用同步机制(如队列)按请求顺序抓取页面。动态页面:使用 JavaScript 渲染引擎模拟用户交互以获得一致视图。服务器端排序:分析排序规则,禁用排序机制或使用 headless 浏览器。爬虫速度过快:调整延迟或速度,使用代理避免被识别为爬…

    2025年12月13日
    000
  • python3爬虫实习报告怎么写

    Python3 爬虫实习收获:熟练掌握 Python3 爬虫技术,精通 Scrapy 框架。培养了问题解决能力,了解了反爬虫技术和应对策略。参与团队协作,提升了沟通和协作能力。了解了互联网数据采集行业的现状和发展趋势。提升了就业竞争力,拓宽了职业视野。 Python3 爬虫实习报告 引言随着互联网技…

    2025年12月13日
    000
  • python 爬虫 该怎么问面试者

    在 Python 爬虫面试中,通过询问以下问题可评估应聘者的能力和经验:Python 爬虫编写经验:了解候选人的经验程度。应对爬虫挑战:考察其解决问题和处理复杂任务的能力。爬虫被阻止的对策:评估其应对常见爬虫挑战的策略。Python 爬虫库的了解程度:确定对 Python 网络爬虫库的熟悉程度。网络…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信