使用RPM分发python包和模块依赖项
我有几个python应用程序,它们由脚本/模块组成,应该打包并作为RPM部署 更棘手的是,每个应用程序都应该与所有python模块依赖项一起分发,并且这些依赖项应该优先于系统范围内安装的任何应用程序 某些RPM的目标主机具有有限的网络访问权限,因此RPM应该包含运行应用程序所需的所有内容,而不是在部署时下载任何内容 我已经看过了包装和分发一个,但是重新定位一个virtualenv似乎没有得到很好的支持 我已经看过了,但发现缺少文档。我可以看到如何在开发过程中下载依赖项,但看不到如何将它们作为更大应用程序的一部分分发。不同的应用程序可能需要同一模块的不同版本,因此不应在系统范围内安装 另一个痛点是,应用程序中的任何python脚本都需要修改,以便在开发期间和部署之后使用不同的sys.path,我看不到明显的解决方法 有没有关于如何最好地实现这一目标的建议?从开发人员的角度来看,理想的工作流摘要如下所示:使用RPM分发python包和模块依赖项,python,virtualenv,packaging,rpm,buildout,Python,Virtualenv,Packaging,Rpm,Buildout,我有几个python应用程序,它们由脚本/模块组成,应该打包并作为RPM部署 更棘手的是,每个应用程序都应该与所有python模块依赖项一起分发,并且这些依赖项应该优先于系统范围内安装的任何应用程序 某些RPM的目标主机具有有限的网络访问权限,因此RPM应该包含运行应用程序所需的所有内容,而不是在部署时下载任何内容 我已经看过了包装和分发一个,但是重新定位一个virtualenv似乎没有得到很好的支持 我已经看过了,但发现缺少文档。我可以看到如何在开发过程中下载依赖项,但看不到如何将它们作为更大
最后的RPM应该可以在没有网络访问的主机上安装和运行,并且只安装了python解释器。我认为这是两个独立的问题
python bootstrap.py;bin/buildout
并准备就绪(与pip/virtualenv相同)
现在您有了一个可重复的构建,可以将其作为安装程序的基础。Handiest是一个干净的虚拟机,您仅用于此目的。例如,Virtualbox/流浪者。制作脚本来设置virtualbox并在其中安装适当的依赖项
然后,installer builder脚本可以在virtualbox中重新签出您的项目,并在您希望在安装程序中安装它的位置执行可重复的构建操作(/opt/yourproject
)
然后使用生成实际的包(.deb、.rpm,随便什么)。传入FPM选项,告诉它必要的依赖项,这样您就可以始终确保安装了这些依赖项。(注意:这些是操作系统级的依赖项,如memcached或postgres;python依赖项应由pip或buildout处理)
如果你把你的大问题分为这两个小问题,那么这两个问题都会受到单独的攻击。你可能会分发一个独立的python可执行文件——打包在RPM中?您是否需要源代码供用户使用?如果不是的话,看看这里,我没有用过它,但我的目标是处理像你这样的案件。查看此链接的“滚动您自己的软件包”部分。您应该使用pip捆绑包或pip“车轮罩”。FPM的一个问题是,不同的软件包(您要安装的)可能具有不同的依赖关系(例如,一个软件包需要requests 1.6,另一个软件包需要requests 2.1等),您无法表达这些差异,因为FPM将单个python包打包为RPM并安装(可以说是全局安装)。因此,最好将python项目及其依赖项作为单个RPM安装,如。