Python依赖项+部署工具?

5
有没有工具可以处理Python模块依赖关系和部署?
细节: 处理的意思是:
- 列出 - 跟踪和 - 为我打包一个可安装的zip文件。 - 让在另一个系统上重新部署变得容易(即:在部署文件中包含所有正确版本的模块,并且不必去其他地方获取它们*)。 - 如果我要做一些改变环境的事情,就会向我发出警报。 - 它必须完全遵循模块依赖关系,而不仅仅是一级深度。 - 再加上一些我可能没有想到的东西。
我不是在谈论Virtualenv、Fabric、pip freeze**和(我认为)Paver。
今晚我试图计算Pylons依赖的模块数量。经过一番折腾,使用Snakefood和Graphviz,答案是很多。100+(而且Snakefood并没有全部列出)。
随着我对Python的了解越来越深入,手动处理这个问题开始占用我比我想象的更多的时间,而且也不可靠。
如果有影响的话,我在Windows 7上使用Python 2.7。
* I know this will introduce some artifacts.  
** Combining virtualenv and pip freeze goes some way to solving this, but it's still not what I am looking for. 
2个回答

5

Setuptools加上pypi就是为此而生的。Setuptools是一个增强版的distutils,可以用它来指定依赖关系。例如,在setup函数中:

install_requires = ['simplejson>=2.0,==dev'],

当您使用easy_install时,它会拉取该依赖项。

我所需要的不是在列出依赖项时拉取它们,而是将它们打包、列出等。此外,它并不总是有效 - 安装有时会失败,对于 Windows,有时需要 msi。不过,你说得没错,setuptools 值得再看一眼。 - Dirk
@dirk 啊,没错。在Windows上这是一个小问题。大多数开源平台都有从源代码构建的方法,并且不会在安装时出现依赖管理问题。 - Keith

2

由于您正在使用Windows操作系统,可以考虑使用py2exe

以下是来自py2exe FAQ的有趣内容:
py2exe如何决定需要哪些模块?
为了确定应该放在最终.exe文件中的模块,py2exe会递归搜索您要打包的脚本以查找其依赖项,进而查找它们所有的依赖项。

非常有趣。不知道是否有办法将输出以除了exe之外的方式呈现。 - Dirk
不知道 distutils http://docs.python.org/distutils/index.html 是否满足您的需求?您可以在 distutils 提供的基础上构建,以添加所需的检查。 - sateesh
部分地,但不完全。我在py2exe文档中找到了这个: python -m py2exe.mf -d path/to/my_file.py - Dirk

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