我有几个Python应用程序,由脚本/模块组成,应该被打包并部署为RPM。
较为复杂的是,每个应用程序都应与所有Python模块依赖项一起分发,并且这些应用程序应优先使用它们而不是安装在系统范围内的任何依赖项。
某些RPM的目标主机受到网络访问的限制,因此RPM应包含运行应用程序所需的所有内容,而不是在部署时下载任何内容。
我曾考虑过打包和分发virtualenv,但似乎不支持重新定位virtualenv。
我曾尝试使用zc.buildout,但发现文档缺乏。我可以看到如何在开发过程中下载依赖项,但不知道如何将它们作为更大应用程序的一部分进行分发。不同的应用程序可能需要相同模块的不同版本,因此这些模块不应安装在系统范围内。
另一个痛点是应用程序中的任何Python脚本需要修改以在开发期间和部署后使用不同的sys.path,我看不出明显的解决方法。
有关如何实现此目标的最佳建议是什么?开发人员角度的工作流程理想摘要如下:
- 下载应用程序源代码
- 运行脚本以获取特定模块依赖项(可能使用pip)
- 运行脚本构建Python应用程序,并将其及所有已下载的依赖项打包成RPM
最终的RPM应该可以在只安装了Python解释器而没有网络访问权限的主机上进行安装和运行。