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

标签 python setuptools

我有包 A 和 B,它们都有自己的 git 存储库、PyPI 页面等...包 A 依赖于包 B,通过使用 install_requires 关键字我可以自动获取 A下载并安装 B。

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

是否有建议的(最好是自动化的)方法,

  • 当我为 A 调用 sdist 时,将 B 包含在 A 中
  • 告诉设置工具 B 与 A 捆绑在一起以解决依赖关系(类似于本地 dependency_links)

谢谢!

最佳答案

这称为“销售”,不,不支持这种方法。

这也是个坏主意;您希望将安装留给专门的工具,这些工具不仅管理依赖关系,还管理安装的版本。使用像 buildout 这样的工具或 pip's requirements.txt format您可以非常精确地控制正在使用的版本。

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

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

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

关于python - 有没有办法将多个包与 Python setuptools 捆绑在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11708150/

相关文章:

python - 如何转义 MANIFEST.in 文件中目录名称中的空格?

python - setup.py 中的 extras_require() 和 install_requires() 之间的区别?

python - 在安装时检测 Python 传递依赖问题?

Python监控串口(RS-232)握手信号

python - 在 python 中准备一个返回矩阵有什么好处?

Python f 字符串在终端和 jupyter 之间以不同方式处理新行

python - 无法在 Windows 上安装 cv2

python - python 3.7中的无序字典

python - 如何使用 setuptools 管理多个 python 子项目?

python - 当用户使用 pip 卸载我的包时如何运行脚本?