【发布时间】:2019-04-26 18:13:44
【问题描述】:
我在理解和实现使用pip 和setuptools 的Python 打包的一些细节时遇到了困难。
假设我有三个项目,A 和 B 和 C 每个项目都是自己的包并托管在自己的代码仓库中。它们也相互依赖,即A由B导入,B由C导入。每个包都有一组直接依赖(即直接导入其他包)和一组间接依赖(即直接依赖包导入的包)。这些依赖关系是一张图,而不是一棵树。
对于包A,setup.py 是否应该只包含直接依赖的包?包B也一样?然后当我pip install C 时,我注意到安装了B,但没有安装A。我想这是因为A 是C 的间接依赖。
我不太喜欢在每个包中存储一个pip freeze 的想法(不灵活且冲突隐约可见),但似乎pip 不会递归地解析依赖关系图(请参阅here)。 snakebasket 项目试图解决这个问题,但现在已经过时了; dependency-links 选项已被弃用。
处理此问题的正确和推荐方法是什么?
附录我忘了提没有包(A、B、C)可通过官方PyPi repo 获得,但住在私人 Github 存储库中。因此,例如B 的 setup.py 包含
install_requires=(
…,
A==1.0.0,
…,
)
dependency_links=[
f"https://{github_token}@github.com/repo/A/archive/v1.0.0.tar.gz#egg=A-1.0.0",
],
并且C 包含一个类似的包B 的设置。
【问题讨论】:
标签: python-3.x pip setuptools setup.py