【问题标题】:python dependency + deployment tool?python依赖+部署工具?
【发布时间】:2011-08-30 19:52:55
【问题描述】:

有人知道在 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. 

【问题讨论】:

    标签: python deployment dependencies dependency-management web-deployment


    【解决方案1】:

    Setuptools 加上pypi 就是为此而生的。 setuptools 是增强的 distutils,您可以使用它指定依赖项。例如在设置函数中:

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

    在您使用 easy_install 时会引入该依赖项。

    【讨论】:

    • 我正在寻找的不是在列出依赖项时会引入依赖项的东西,而是会为我打包、列出它们等的东西。此外,它并不总是有效 - 安装有时会失败,而对于 Windows,您有时需要 msi。不过,你说得对,setuptools 值得一看。
    • @dirk 啊,对。这在 Windows 上有点问题。大多数开源平台都有从源代码构建的方法,并且在安装时间依赖管理方面没有问题。
    【解决方案2】:

    由于您在 Windows 上,请查看py2exe。 py2exe FAQ 感兴趣的东西:

    py2exe 如何决定您需要哪些模块? 要确定哪些模块应该放在最终的 .exe 文件中,py2exe 对要打包的脚本进行递归搜索 它的依赖关系,反过来,它们的所有依赖关系。

    【讨论】:

    • 非常有趣。我想知道是否有办法让输出不作为 exe。
    • distutils docs.python.org/distutils/index.html 不能满足您的需要吗?您可以在 distutils 提供的基础上添加您需要的检查。
    • 部分但不完全。我在 py2exe 文档中找到了这个:python -m py2exe.mf -d path/to/my_file.py