pip安装Azure系列依赖包时出现ruamel.yaml错误问题咨询
问题原因
- 核心是依赖版本约束冲突与pip批量安装时的依赖解析逻辑问题:
你指定的azure-cli==2.29.2对ruamel.yaml的版本约束为<=0.17.16,该版本的C扩展代码和Python 3.9、Arch Linux默认的高版本gcc编译器存在兼容性问题,用到了Python3.9已调整的底层API,编译时会触发大量错误。批量安装时pip会优先满足所有包的版本约束,选择该不兼容的旧版本进行编译安装,因此触发报错。 - 提前单独安装
ruamel.yaml仍然失效的原因:
批量安装azure相关包时,pip会校验依赖版本是否符合要求,如果你提前安装的ruamel.yaml版本不在azure-cli的允许范围内,会被自动卸载并重新安装符合约束的旧版本,因此仍然会触发编译错误。 - 逐个安装可以成功的原因:
单独安装ruamel.yaml时,pip没有其他版本约束,会自动选择适配当前Python、编译器环境的最新兼容版本;后续安装azure-cli时,pip会优先尝试复用已安装的高版本ruamel.yaml,仅触发版本不匹配警告,不会强制降级,因此可以安装成功。
解决方案
方案1(最简便,推荐)
安装前设置环境变量禁用ruamel.yaml的C扩展编译,全程使用纯Python实现:
export RUAMEL_YAML_NO_EXT=1 pip install -r requirements.txt
该方案不会影响功能正常使用,仅会小幅降低大体积YAML文件的读写性能,日常使用无感知。
方案2(修改requirements.txt固定配置)
在你的requirements.txt最前面添加如下行,指定安装无C扩展的兼容版本,满足azure-cli的版本要求:
ruamel.yaml<=0.17.16 --global-option="--without-ext"
之后正常执行pip install -r requirements.txt即可。
方案3(保留C扩展性能)
如果你需要ruamel.yaml的C扩展性能,可以调整安装顺序,先单独安装符合要求的兼容版,再安装剩余依赖,强制pip不降级ruamel.yaml:
pip install wheel pip -U pip install ruamel.yaml==0.17.16 pip install -r requirements.txt --force-reinstall=ruamel.yaml
内容的提问来源于stack exchange,提问作者zjeffer
相关产品推荐
相关产品推荐

