如何让pip在遇到不兼容依赖时返回非零退出码?
问题解答
该现象不是Bug,是pip的默认设计
pip 20.3及后续版本默认启用新版依赖解析器后,默认策略为:只要用户指定安装的包本身完成安装,即使存在已安装包之间的依赖冲突,也会返回0退出码并提示安装成功。你看到的两类冲突提示仅为警告性质的错误提示,不会触发安装失败的退出逻辑。
ERROR: A x.y.z has requirement B<1.0.0, but you'll have B 1.0.0 which is incompatible.
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. A x.y.z requires B<1.0.0, but you have B 1.0.0 which is incompatible.
实现依赖冲突时返回非零退出码的方案
- 方案1:使用pip内置参数(适用于pip 21.2及以上版本)
执行install命令时增加--fail-on-conflict参数,只要解析到依赖冲突就会直接终止安装并返回非零退出码,命令示例:
也可以直接设置全局环境变量pip install <your-package> --fail-on-conflictPIP_FAIL_ON_CONFLICT=1实现默认生效,无需每次加参数。 - 方案2:搭配
pip check命令(兼容所有pip 20、21版本)
如果你的pip版本低于21.2不支持上述参数,可以在pip install执行完成后,追加执行pip check命令:pip install <your-package> pip checkpip check会主动扫描所有已安装包的依赖兼容性,存在冲突时会返回非零退出码,完全可以满足CI系统识别依赖冲突的需求。
内容的提问来源于stack exchange,提问作者atlau
相关产品推荐
相关产品推荐

