pip install在>=版本依赖树下的包选择逻辑及指定最小安装版本方法
解答
问题1:执行pip install -r requirements.txt时安装的x版本
pip的依赖解析逻辑会先收拢全依赖链中同一个包的所有版本约束,取约束的合法交集后,默认选择交集中的最新可用版本:
- 你给出的场景下,所有对x的版本约束为:
x>=1.3.5(本项目声明)、x>=1.3.2(a包依赖)、x>=1.3.7(b包依赖)、x>=1.4.0(c包依赖) - 所有约束的交集为
x>=1.4.0,当前x的最新版本1.5.1符合交集要求,因此默认会安装1.5.1版本的x
注意:如果依赖链中存在互斥的版本约束(比如某包要求
x<=1.3.0),pip会直接抛出依赖冲突错误,不会自动选择版本安装。
问题2:指定安装x==1.4.0的实现方式
不需要修改requirements.txt,有两种常用的pip参数方案可选,只要x==1.4.0符合所有依赖的版本约束即可生效:
- 直接在install命令中追加包版本声明,命令行声明的包优先级高于requirements.txt内的声明,写法最简单:
pip install x==1.4.0 -r requirements.txt
- 如果需要固定多个包的版本,可使用
--constraint(简写为-c)参数传入约束规则,示例如下:
# 直接临时传入单包约束 pip install -c <(echo "x==1.4.0") -r requirements.txt # 已将所有版本约束写入constraints.txt文件的场景 pip install -c constraints.txt -r requirements.txt
内容的提问来源于stack exchange,提问作者A. Kali
相关产品推荐
相关产品推荐

