搜索

打包 python RPM

Jan 05, 2025 am 04:16 AM

Packaging python RPMs

最近我正在执行当前项目中的一项非常具体的任务
为 Red Hat 工作,RHEL Lightspeed
ShellAI,这个项目是
相对较新,但我们希望开始为我们的量化宽松开发 RPM
朋友们开始使用该工具并在他们的管道中测试它。

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

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

任务详情

ShellAI 项目计划在 RHEL 9 和即将推出的版本下发布
RHEL 10。作为奖励目标,我们希望它也能在 RHEL 8 上运行。

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

  • RHEL 8 有 Python 3.6
  • RHEL 9 有 Python 3.9
  • 最后,RHEL 10 有 Python 3.12

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

对于开发部分,我们想使用
pdm 来管理我们的依赖关系和
构建。当我们完成任务时,我们注意到 pdm 后端不是
已在 RHEL 存储库中提供,因此我们使用默认的 setuptools build
后端。

由于我们的系统目标“相对较新”,我们希望对
进行现代化改造 项目并确保我们使用新的工具/结构和格式。对于
我们选择使用 pyproject.toml 来做,因为它是通过 pdm init 生成的
当我们引导项目时。

构建 RPM 时遇到的问题

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

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

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

为此,Fedora 文档有一篇不错的文章,名为 Python Packaging
指南
他们去哪里的详细信息。虽然指南涵盖了几乎所有主题和案例
你可能需要,即使有一个例子
规格文件。

我们的主要目标是 RHEL,我们可以想象遵循一切
从指南中可以按原样工作,对吗?不,原因在于
RHEL 存储库中提供的版本。即使新的宏
指南中指出的可能在构建过程中起作用,您将无法生成
以下目标的最终 RPM:

  • RHEL 8 将在 %generate_buildrequires 期间向您抛出错误,如下所示 该版本中附带的 python3-setuptools 版本非常旧并且确实 不太认识新的 pyproject.toml 格式。
  • RHEL 9 将能够完成大部分步骤,但会失败 %pyproject_wheel,因为它将构建一个名为 UNKNOWN 的包。这 发生这种情况是因为(再次)RHEL 9 下提供的 python3-setuptools 是 老的。它无法识别由 pyproject.toml 规范

解决方案

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

  • tomllib 在 RHEL 8 中可用(通过 pypi 和 rpm 打包)
  • Python 3.11 之后,tomllib 原生捆绑到标准库中

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

关于规范文件,我们必须返回并使用文档中所说的
“201x时代”Python打包
指南。
本质上,我们使用的是旧的 python setup.py build ... 命令
(显然是通过宏)来构建项目。

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

以上是打包 python RPM的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
什么是Python Switch语句?什么是Python Switch语句?Apr 30, 2025 pm 02:08 PM

本文讨论了Python版本3.10中介绍的新“匹配”语句,该语句与其他语言相同。它增强了代码的可读性,并为传统的if-elif-el提供了性能优势

Python中有什么例外组?Python中有什么例外组?Apr 30, 2025 pm 02:07 PM

Python 3.11中的异常组允许同时处理多个异常,从而改善了并发场景和复杂操作中的错误管理。

Python中的功能注释是什么?Python中的功能注释是什么?Apr 30, 2025 pm 02:06 PM

Python中的功能注释将元数据添加到函数中,以进行类型检查,文档和IDE支持。它们增强了代码的可读性,维护,并且在API开发,数据科学和图书馆创建中至关重要。

Python的单位测试是什么?Python的单位测试是什么?Apr 30, 2025 pm 02:05 PM

本文讨论了Python中的单位测试,其好处以及如何有效编写它们。它突出显示了诸如UNITSEST和PYTEST等工具进行测试。

Python中的访问说明符是什么?Python中的访问说明符是什么?Apr 30, 2025 pm 02:03 PM

文章讨论了Python中的访问说明符,这些说明符使用命名惯例表明班级成员的可见性,而不是严格的执法。

Python中的__Init __()是什么?自我如何在其中发挥作用?Python中的__Init __()是什么?自我如何在其中发挥作用?Apr 30, 2025 pm 02:02 PM

文章讨论了Python的\ _ \ _ Init \ _ \ _()方法和Self在初始化对象属性中的作用。还涵盖了其他类方法和继承对\ _ \ _ Init \ _ \ _()的影响。

python中的@classmethod,@staticmethod和实例方法有什么区别?python中的@classmethod,@staticmethod和实例方法有什么区别?Apr 30, 2025 pm 02:01 PM

本文讨论了python中@classmethod,@staticmethod和实例方法之间的差异,详细介绍了它们的属性,用例和好处。它说明了如何根据所需功能选择正确的方法类型和DA

您如何将元素附加到Python数组?您如何将元素附加到Python数组?Apr 30, 2025 am 12:19 AM

Inpython,YouAppendElementStoAlistusingTheAppend()方法。1)useappend()forsingleelements:my_list.append(4).2)useextend()orextend()或= formultiplelements:my_list.extend.extend(emote_list)ormy_list = [4,5,6] .3)useInsert()forspefificpositions:my_list.insert(1,5).beaware

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境