使用RPM分发python包和模块依赖项

2024-06-05 19:29:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个python应用程序,它们由脚本/模块组成,应该打包并部署为RPMs。

更棘手的一点是,每个应用程序都应该与所有python模块依赖项一起分发,这些应用程序应该优先于系统范围内安装的任何应用程序。

其中一些RPM的目标主机具有有限的网络访问权限,因此RPM应包含运行应用程序所需的所有内容,而不是在部署时下载任何内容。

我已经研究过打包和分发virtualenv,但是重新定位virtualenv似乎没有得到很好的支持。

我看过zc.buildout,但发现缺少文档。我可以看到如何在开发期间下载依赖项,但不能看到如何将它们作为更大的应用程序的一部分分发。可能不同的应用程序需要同一模块的不同版本,因此不应在系统范围内安装这些应用程序。

另一个痛点是,在开发期间和部署之后,应用程序中的任何python脚本都需要修改以使用不同的sys.path,我看不出有什么明显的方法可以解决这个问题。

是关于如何最好地实现这一点的建议吗?从开发人员的角度来看,理想的工作流摘要如下:

  1. 下载应用程序源
  2. 如果不存在特定的模块依赖项,则运行脚本获取这些依赖项(可能使用pip
  3. 运行脚本来构建python应用程序,并将其和所有下载的依赖项打包到RPM中

最后的RPM应该可以在没有网络访问的主机上安装和运行,并且只安装了一个python解释器。


Tags: 模块定位网络脚本应用程序权限内容目标
1条回答
网友
1楼 · 发布于 2024-06-05 19:29:45

我认为这是两个独立的问题。

  1. 您希望为开发人员提供可重复的安装/构建系统。

  2. 您需要安装程序生成器。

Buildout(或者pip,可能与一个额外的脚本结合使用)可以解决第一个问题。基本上:“如何在一台新的笔记本电脑上为项目开发做好准备”。理想情况下,您只需说python bootstrap.py;bin/buildout并做好准备(与pip/virtualenv相同)。

既然已经有了可重复的构建,就可以将其用作安装程序的基础。handest是一个干净的虚拟机,您可以将其用于此目的。例如,虚拟盒子/流浪汉。制作用于设置virtualbox并在其中安装适当依赖项的脚本。

然后,installer builder脚本可以在virtualbox中重新签出您的项目,并在希望在安装程序中包含该项目的位置执行可重复的构建操作(例如,/opt/yourproject)。

然后使用FPM生成实际的包(.deb,.rpm,随便什么)。传入告诉它必需依赖项的FPM选项,这样就可以始终确保安装了这些依赖项。(注意:这些是操作系统级的依赖项,如memcached或postgres;python依赖项应该由pip或buildout处理)。

如果你把你的大问题分成这两个小问题,这两个问题都可以单独攻击。

相关问题 更多 >