我有几个由脚本/模块组成的 python 应用程序,它们应该被打包并部署为 RPM。
更棘手的一点是,每个应用程序都应该与所有 python 模块依赖项一起分发,并且应该优先使用这些应用程序,而不是在系统范围内安装的任何应用程序。
其中一些 RPM 的目标主机具有有限的网络访问权限,因此 RPM 应包含运行应用程序所需的所有内容,而不是在部署时下载任何内容。
我已经查看了打包和分发virtualenv,但重新定位 virtualenv 似乎并没有得到很好的支持。
我查看了zc.buildout,但发现缺少文档。我可以看到如何在开发过程中下载依赖项,但看不到如何将它们作为更大应用程序的一部分进行分发。不同的应用程序可能需要同一模块的不同版本,因此不应在系统范围内安装这些应用程序。
另一个痛点是应用程序中的任何 python 脚本都需要在开发期间和部署后修改以使用不同的 sys.path,我看不到明显的解决方法。
关于如何最好地实现这一目标的建议?从开发人员的角度来看,理想的工作流程总结如下:
- 下载应用程序源
- 如果不存在,则运行脚本以获取特定的模块依赖项(可能使用pip)
- 运行脚本来构建 python 应用程序,并将它和所有下载的依赖项打包到 RPM 中
最终的 RPM 应该可以在没有网络访问的主机上安装和运行,并且只安装了一个 python 解释器。