Azure Batch节点运行Python无法识别azure.storage.blob模块如何解决
问题定位步骤
先在Azure Batch计算节点上执行以下校验命令,逐一排查根因:
- 校验当前Python解释器加载的azure-storage-blob实际版本:
python3 -c "import azure.storage.blob; print(azure.storage.blob.__version__)"
90%的同类问题都是版本不匹配导致:BlobServiceClient是azure-storage-blob 12.x大版本才引入的类,如果节点上装的是2.x旧版(甚至是更早的整合包azure-storage),模块下根本不存在这个类,自然抛出属性不存在的异常。 - 校验模块实际加载路径,排除多Python环境冲突:
python3 -c "import azure.storage.blob; print(azure.storage.blob.__file__)"
常见坑是装包时直接调用pip而非对应Python版本的pip,把包装到了Python2或其他虚拟环境路径下,执行脚本时Python3加载的是系统预装的旧版模块,根本不是你手动安装的版本。另外如果用root用户装包、普通用户跑任务,也可能出现权限不足读不到包、加载旧版系统包的问题。 - 校验是否存在命名冲突:检查脚本所在目录下,有没有自定义命名为
azure.py的文件、或是名为azure的自定义文件夹,这类同名文件会被Python优先加载,覆盖官方安装的SDK包。
对应解决方案
根据定位到的问题对应处理即可:
- 版本不匹配问题
先彻底卸载所有旧版本残留,避免多版本冲突:
再安装12.x稳定版的SDK:pip3 uninstall -y azure-storage azure-storage-blob azure-commonpython3 -m pip install azure-storage-blob==12.19.0
装完重新执行版本校验命令,确认版本号为12.x以上再测试脚本。 - 多环境冲突问题
永远用执行脚本的对应Python解释器调用pip装包,比如你用python3 xxx.py跑脚本,装包就用python3 -m pip install <包名>,不要直接敲pip或pip3,避免包装到其他环境。如果是通过Azure Batch启动任务装包,要保证启动任务的执行用户和后续跑任务的用户一致,或者装包时加--user参数安装到当前用户的包目录下。 - 命名冲突问题
把自定义的同名azure.py文件、azure文件夹重命名为非冲突名称,删除脚本目录下的__pycache__缓存文件夹后重新运行脚本。
本地脚本运行正常可直接排除代码语法错误,优先比对本地和节点的azure-storage-blob版本号,两边版本对齐后绝大多数情况都能直接解决问题。
内容的提问来源于stack exchange,提问作者Eli Sailer-Haugland
相关产品推荐
相关产品推荐

