如何生成python pip依赖范围?

How to generate python pip dependency ranges?

提问人:amin_nejad 提问时间:12/15/2020 更新时间:12/15/2020 访问量:440

问:

我正在开发一个 python 库,我们目前正在使用它来固定依赖项。pip-tools

例如,基本:requirements.in

black
pandas
torch

在此文件上运行将生成如下所示的内容(此处已简化):pip-compilerequirements.txt

black==20.8b1             # via -r requirements.in
click==7.1.2              # via black
numpy==1.19.4             # via pandas, torch
pandas==1.1.5             # via -r requirements.in
pathspec==0.8.1           # via black
pytz==2020.4              # via pandas
regex==2020.11.13         # via black
torch==1.7.1              # via -r requirements.in

我的问题是,由于最终用户对其他库缺乏灵活性,因此不建议为将在 pypi 上公开的包固定版本。在这些情况下,指定依赖关系范围似乎是常见的做法,例如

numpy >=1.18.0, <1.19.0
pandas >=1.0.0
etc.

我的问题是,在给定上述情况的情况下,是否有任何方法可以自动生成这些依赖范围?我想使用现有的依赖项解析工具来生成与所有库兼容的最低和最高版本应该相对容易。(任何未指定任何版本的库都可以保持原样。requirements.in

我还没有找到任何可以做这样的事情的工具。其他库的维护者是否手动执行此任务?我知道我上面描述的方法仍然需要对没有交叉依赖关系的库进行一些手动干预,但在大多数情况下(当然在我的情况下),这应该可以完成繁重的工作。requirements.in

python 依赖解析 pip-tools

评论

2赞 sinoroc 12/15/2020
是的,您应该在 .自动执行此任务几乎是不可能的。例如,如果每个项目都使用可靠的语义版本控制,那将是可行的,但事实并非如此,因此必须手动完成。requirements.in
0赞 amin_nejad 12/15/2020
我想我有点惊讶,但感谢您确认@sinoroc
0赞 sinoroc 12/15/2020
我不确定您期望自动完成什么。如果您不给出任何限制,那么安装程序(pip、poetry、dephell 等)将自动找出 1 个兼容的组合,但他们不会计算所有兼容的组合(或范围)。作为项目的作者,您的工作是声明顶级库的版本范围。与仔细选择直接依赖项的方式相同,也应该仔细选择这些直接依赖项的版本范围。我不知道有任何工具可以自动执行此操作(不仅仅是在 Python 中)。
0赞 amin_nejad 12/16/2020
例如,它不仅计算 1 个兼容组合,而且实际上可以在每次运行时计算所有库的最新兼容组合。既然它已经在这样做了,我认为它也应该能够计算最早的可能版本(当然,只有在另一个库中指定了这一点)。pip-toolspip-compile --upgrade
0赞 sinoroc 12/16/2020
或。也许有可能得到一个下限。我不知道,也许有可能,我应该考虑一下。--老实说,我不太确定这样做有多大价值。依赖项解析是一项相当昂贵的操作。

答: 暂无答案