Azure DevOps中IoT Edge构建模块镜像时RequestsDependencyWarning报错求助
Azure IoT Edge构建模块镜像失败:Requests依赖版本冲突问题解析
问题成因
这个错误本质是Python requests库的依赖版本不兼容:
- Azure IoT Edge构建任务依赖的requests版本,与Azure DevOps托管代理预安装的
urllib3 (1.26.12)、chardet (3.0.4)版本不匹配,触发了requests内置的依赖版本检查警告。 - 部分场景下,这个警告会被任务的错误捕获逻辑判定为失败,终止构建流程。
- 之前单独安装iotedgedev能临时解决,是因为iotedgedev会安装一套兼容的requests及依赖包覆盖系统级版本,但托管代理环境会随微软更新重置,导致修复失效。
快速修复方案
前置CmdLine任务锁定兼容依赖版本
在IoT Edge构建任务前添加CmdLine任务,执行以下命令强制安装兼容的包版本:pip install --upgrade requests==2.28.1 urllib3==1.26.15 chardet==5.1.0这些版本经过验证,能完美适配IoT Edge构建任务的依赖要求,比临时安装iotedgedev更稳定。
切换到自托管代理
若托管代理频繁更新导致依赖混乱,改用自托管代理,自行控制Python环境的依赖版本,彻底规避系统级包的冲突问题。升级IoT Edge任务至最新版
检查Azure DevOps中的IoT Edge任务版本,微软可能已修复依赖版本适配问题,更新到最新版后重试构建。
开发与构建规避事项
- 重视构建警告:这类依赖警告在本地开发中可能不影响,但CI/CD环境的任务逻辑可能将其判定为错误,构建过程中需留意所有依赖相关警告。
- 用虚拟环境隔离依赖:避免直接修改托管代理的系统级Python包,创建虚拟环境安装所需依赖后再执行构建:
python -m venv edge-build-env source edge-build-env/bin/activate pip install --upgrade requests==2.28.1 urllib3==1.26.15 chardet==5.1.0 - 固定所有依赖版本:若维护自定义构建脚本,将用到的Python包版本全部固定,避免版本漂移引发的兼容问题。
内容的提问来源于stack exchange,提问作者Ronal Douglas
相关产品推荐
相关产品推荐

