5

我有包 A 和 B,都有自己的 git 仓库、PyPI 页面等。包 A 依赖包 B,通过使用install_requires关键字我可以让 A 自动下载和安装 B。

但是假设我想为我特别不精通的用户更进一步;我实际上想在包 A 的 tar/zip 中包含包 B,因此无需下载(这也让他们有可能对包 B 进行任何手动编辑setup.cfg

是否有建议的(理想情况下是自动化的)方法,

  • 当我要求 A 时,将 B 包含在sdistA 中
  • 告诉 setuptools B 与 A 捆绑以解决依赖关系(类似于 local dependency_links

谢谢!

4

1 回答 1

0

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

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

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

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

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

于 2012-07-29T09:37:03.963 回答