如何使Python的依赖包具有可移植性?

3

我并不是一名Python专家,但Python确实非常有用,所以我正在努力提高自己的技能。

我正在开发一个项目,使用了'requests'和'grequests'这两个包。这两个包都有依赖关系,通常由'pip'或'easy_install'处理。这对于开发环境或安装到一两台机器上来说是可以的,但我需要将我的项目部署到200多台机器上。最佳的方法是如何将我的依赖项与我的项目打包在一起,使其具有可移植性?

Python版本为v2.7

2个回答

5
在您的计算机上:
pip freeze > requirements.txt

在其他计算机上:
pip install -r requirements.txt

另外,我建议您使用virtualenv工具以更加舒适的方式处理依赖关系。对于更复杂的解决方案(例如分布式依赖关系管理),请查看Puppet。来自PyCon的精彩演示:使用Puppet进行依赖关系管理


2
virtualenv绝对是一个好的选择,但我并不认为在每台机器上安装pip是有意义的。也许这是Python的做法,但对我来说,在构建时有一些构建服务器拉取我的要求更有意义,这样当我升级到最新版本的requests时,我就不必重复地拉取同样的依赖项200多次。确保一致性和审计似乎会很困难。 - GregB
@GregB 我更新了我的答案,加入了新的要求 :) - Alexey Kachayev
谢谢。我有一个坏习惯,喜欢追求简洁,但在这个过程中错过了关键要求:)。我确实使用puppet来管理这些服务器,所以这对我来说绝对是一个选项。只是自包含软件包的某些方面让我觉得很吸引人。 - GregB
“自包含的软件包总是让我感到非常吸引人。”确实如此……这将使得那些不使用命令行工具的大众也能够使用Python应用程序。世界上的大多数人只想下载和安装,就像应用市场或Dropbox一样! - sirvon

1

使用pip的需求文件,或者使用像buildout这样支持复杂安装并可以为您固定版本的部署工具:

[buildout]
versions = myversions
parts =
    mypackage

[myversions]
mypackage = 1.0
requests = ...

[mypackage]
recipe = zc.recipe.egg
eggs = mypackage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接