有没有办法将多个包与Python setuptools捆绑在一起?

时间:2012-07-29 09:28:37

标签: python setuptools

我有包A和B,都有自己的git存储库,PyPI页面等...包A依赖于包B,并且使用install_requires关键字我可以得到A来自动下载和安装B.

但是假设我想为我特别不精明的用户更进一步;我想在软件包A的tar / zip中包含软件包B,因此不需要下载(这也可以让他们对包装B的setup.cfg进行任何副手编辑)

是否有建议(理想的自动化)方式,

  • 当我为A
  • 致电sdist时,在A中加入B
  • 告诉setuptools B与A捆绑在一起以解决依赖关系(类似于本地dependency_links

谢谢!

1 个答案:

答案 0 :(得分:0)

这称为“供应商”,不,不支持这种方法。

这也是一个坏主意;您希望将安装保留到专用工具,这些工具不仅可以管理依赖项,还可以管理安装的版本。使用buildoutpip's requirements.txt format等工具,您可以非常精确地控制正在使用的版本。

通过捆绑内部版本的依赖项,您可以强制用户使用他们使用的版本,或者使这些工具更难以确保给定安装的已使用版本是一致的。此外,您可能会浪费带宽和空间;如果其他包也包含相同的要求,您现在有多个副本。如果您的依赖项已更新以解决严重的安全问题,则必须重新发布捆绑它的任何程序包。

过去,一些软件包确实使用供应商包装来在其分发中包含依赖项。 requests是一个很好的例子;他们放弃了这种方法,因为它使发布过程变得复杂。例如,每当其中一个出售的软件包中出现错误时,他们就必须生成一个新版本以包含修复程序。

如果你想坚持包含软件包,你必须自己编写支持。我相信requests手动将供应商的包添加到他们的存储库中;所以他们保留了他们不时更新的静态副本。或者,您可以在创建分发时将setup.py扩展为下载代码。