因此,我有这个项目,它有许多依赖项,这些依赖项都是从pip安装的,并且在requirements.txt中有文档记录,现在我需要添加另一个依赖项,这个依赖项现在不存在于pip上,并且在某些地址中作为RPM存在。什么是最毕达通的方式来安装它作为一个要求?谢谢!代码将在RHEL和Fedora上运行。
发布于 2016-12-31 00:24:43
在这种情况下,如果不能满足依赖,那么Pythonic要做的事情就是简单地失败。没关系,如果您的用户没有满足安装的先决条件,他们就会发现一个有用的错误。考虑大量带有C库依赖项的Python包,以便正确构建和安装。在您的项目中,仍然在"setup.py“和"requirements.txt”文件中声明所有的Python依赖项,但是Python打包工具链中没有任何东西可以为您安装RPM (也不应该!),所以如果没有安装RPM,就停止安装,让安装失败。
除此之外,您还可以考虑将Python应用程序本身打包为RPM。您有RPM依赖项,您的目标平台是Fedora/RHEL。通过将应用程序打包为RPM,您可以声明对其他RPM的依赖关系,这将自动安装这些所需的包。担心在RPM的构建阶段是Pythonic的,并使用RPM魔法来完成其余的工作。
我建议不要使用配置管理工具(木偶、Ansible等),因为它们会使您的构建过程过于复杂。这些工具对于它们的预期用途是很好的,但在这里,它就像用大炮拍苍蝇一样。
发布于 2016-12-30 10:53:58
管理这种依赖关系的传统方法是使用配置管理系统(如SaltStack )--我个人推荐使用它,因为它是用Python编写的,可以用Python模块进行扩展。其他选择包括木偶、厨师或可抗。
使用配置管理系统,您可以声明要在目标操作系统上安装和配置的包、配置文件和服务。然后,运行代理并完成所有繁重工作:复制文件、安装RPM包和启用/禁用服务。其优点是巨大的:您的OS配置被描述为代码,您总是可以得到可预测的结果,并为以后的安装节省时间。
请注意,使用CM引入了相当陡峭的学习曲线。然而,当你把你的头绕在它周围的时候,你就再也不会用手做操作系统配置了。
更简单的方法可能是将必要的命令包装在bash脚本中,称为install_dependencies.sh
。一个应该将这个脚本作为应用程序部署的一部分来运行,所以最好在某个地方记录这个过程。
发布于 2017-01-05 23:58:10
既然我们在讨论选择--我会提交一个还没讨论过的。
码头集装箱。
您可以使用所需的操作系统安装基本映像,然后Docker文件将安装所需的所有依赖项。它还可以pip安装要求。
这使服务器保持了不需要的任何安装,而且版本控制很容易,因为您将有一个新容器,它具有新的代码/依赖项,而不会与旧版本重叠。
https://stackoverflow.com/questions/41359091
复制相似问题