【发布时间】:2013-08-07 17:02:16
【问题描述】:
我有几个由脚本/模块组成的 python 应用程序,应该打包并部署为 RPM。
更棘手的一点是,每个应用程序都应该与所有 python 模块依赖项一起分发,并且应该优先使用这些依赖项,而不是在系统范围内安装的任何应用程序。
其中一些 RPM 的目标主机具有有限的网络访问权限,因此 RPM 应包含运行应用所需的所有内容,而不是在部署时下载任何内容。
我查看了 virtualenv 的打包和分发,但似乎不太支持重新定位 virtualenv。
我查看了zc.buildout,但发现缺少文档。我可以看到如何在开发过程中下载依赖项,但看不到如何将它们作为更大应用程序的一部分进行分发。不同的应用程序可能需要同一模块的不同版本,因此不应在系统范围内安装这些应用程序。
另一个痛点是应用程序中的任何 python 脚本都需要在开发期间和部署后修改以使用不同的 sys.path,我看不到明显的解决方法。
是否有关于如何最好地实现这一目标的建议?从开发人员的角度来看,理想的工作流程总结如下:
- 下载应用源码
- 运行脚本以获取特定模块依赖项(如果不存在)(可能使用pip)
- 运行脚本构建python应用,并将它和所有下载的依赖打包到RPM中
然后,最终的 RPM 应该可以在没有网络访问权限且仅安装了 python 解释器的主机上安装和运行。
【问题讨论】:
-
您可能会分发一个独立的 python 可执行文件 - 打包在 RPM 中?您是否需要向用户提供源代码?如果不看这里stackoverflow.com/questions/5458048/…
-
我没用过,但是conda's的目标是处理像你这样的案例。在此链接中查看“滚动您自己的包”部分。
-
你应该使用 pip bundles 或 pip "wheel house"
标签: python virtualenv packaging rpm buildout