与您自己的依赖项共享第三方依赖项的最佳实践



我的项目依赖于另一个项目,我在setup.py文件中使用git依赖,如下所示:

setup(
name="cake",
version="0.1",
install_requires=[
"flan @ git+ssh://git@github.com/terrymcguire/flan.git#egg=flan"
]
)

假设它们依赖于pyyaml。最佳做法是在两个项目的setup.pyinstall_requires: ...(或requirements.txt,根据您的喜好(中都包含一个"pyyaml==5.1.2",并确保版本相同,还是建议在flan项目中仅将pyyaml列为依赖项,然后继承父项目中的版本,尽管pyyaml是父项目的依赖项还不太清楚,如果有一天我不再依赖flan,我可能不会注意到我可能破坏了其他代码?

1.

在两个项目的setup.pyinstall_requires: ...(或您喜欢的requirements.txt(中都包含一个"pyyaml==5.1.2"[…]是最佳做法吗?

只有应用程序应该(可能(将需求绑定到特定版本。库应限制为一系列已知的兼容版本(尽可能准确(。

一般来说,我认为将依赖关系的版本固定在setup.py(或pyproject.toml(中是个坏主意,因为最终用户(无论是应用程序还是库(都不能(轻易(否决这些依赖关系,最终用户应该对安装的内容拥有最终决定权。另一方面,很好的做法是以requirements.txt文件的形式推荐已知工作良好的依赖项的固定版本的组合(因为它已经过测试(,最终用户可能会选择使用或不使用(对于应用程序,这对库来说没有多大意义(。

例如,阅读DonaldStuff的文章">setup.py vs requirements.txt"。

2.

是否建议只将pyyaml列为flan项目中的依赖项,然后在父项目中继承版本,尽管那时不太清楚pyyaml是父项目的依赖项[…]?

一般(明显(规则是,所有项目都应该列出所有自己的依赖项,并且只列出自己的依赖关系。其他任何事情都没有任何意义(当然也可能一如既往地有例外(。

最新更新