我有几个python应用程序,由脚本/模块组成,这些脚本/模块应该打包并部署为RPM。
更棘手的一点是,每个应用程序都应该与所有python模块依赖关系一起分发,并且应该优先使用这些应用程序,而不是在系统范围内安装的任何应用程序。
其中一些RPM的目标主机网络访问有限,因此RPM应该包含运行应用程序所需的所有内容,而不是在部署时下载任何内容。
我看过维塔列夫的打包和分发,但是重新定位一个虚拟主机似乎没有很好的支持。
我看过zc.buildout,但发现缺少文档。我可以看到如何在开发期间下载依赖项,但不知道如何将它们作为更大应用程序的一部分分发。可能不同的应用程序需要相同模块的不同版本,因此不应该在系统范围内安装。
另一个痛苦之处是,应用程序中的任何python脚本都需要在开发过程中修改以使用不同的sys.path,而且在部署之后,我看不到明显的解决方法。
对于如何最好地实现这一点,是否有建议?从开发人员的角度来看,理想的工作流摘要如下:
最后的RPM应该是可安装的,并且可以在没有网络访问的主机上运行,并且只安装了python解释器。
发布于 2013-09-02 12:36:42
我会把它看作是两个不同的问题。
构建(或者pip,也许与一个额外的脚本相结合)可以解决第一个问题。基本上:“如何在一台新笔记本电脑上为项目的开发做好准备”。理想情况下,您只需说python bootstrap.py;bin/buildout并做好准备(pip/virtualenv也是如此)。
现在您有了一个可重复的构建,您可以使用它作为安装程序的基础。Handiest是一个干净的虚拟机,您可以使用它来实现这个目的。例如,Virtualbox/流浪汉。创建设置virtualbox并在其中安装适当依赖项的脚本。
然后,安装程序构建器脚本可以在virtualbox中对您的项目进行新的签出,并在希望将其放在安装程序中的位置执行可重复的构建操作(例如,/opt/yourproject)。
然后使用FPM来制作实际的包(.deb、.rpm等)。传入FPM选项,这些选项告诉它必需的依赖项,这样您就可以始终确保安装了这些依赖项。(注意:这些是OS级的依赖项,如memcached或postgres;python依赖项应该由pip或buildout处理)。
如果你把你的大问题分成这两个小问题,这两个问题都可以被分开攻击。
https://stackoverflow.com/questions/18109409
复制相似问题