Azure Function App部署Python函数遇ModuleNotFoundError求助
解决方案:Azure Function Python 模块导入与依赖冲突问题
问题根源
azure-storage是Azure存储SDK的旧版元包(已废弃),与新版拆分后的azure-storage-blob存在依赖冲突,导致云端部署时模块命名空间混乱,引发导入错误;后续的AppendBlob问题则是因为使用了旧版SDK的API。
具体修复步骤
1. 清理依赖文件(requirements.txt)
删除requirements.txt中的azure-storage条目,保留以下依赖即可:
azure-core>=1.26.0 azure-functions>=1.17.0 azure-storage-blob>=12.14.0
注:azure-storage-blob已自动依赖azure-core,可省略azure-core条目,保留也不影响
2. 修正代码中的导入语句
替换旧版的import azure.storage为新版SDK的正确路径:
- 如果是操作Append Blob,使用以下导入:
from azure.storage.blob import BlobServiceClient, AppendBlobClient - 移除所有基于
azure.storage的旧导入,避免命名空间冲突。
3. 确保云端依赖正确安装
- 本地先执行
pip install -r requirements.txt,验证本地运行正常。 - 部署到Azure Function时,确认Function App的常规设置中,"构建方式"设为远程构建(Linux环境默认开启),确保Azure重新安装依赖,避免本地与云端依赖版本不一致。
- 若远程构建失败,可手动打包依赖后部署:
将pip install -r requirements.txt --target .python_packages/lib/site-packages.python_packages文件夹与函数代码一同上传。
4. 修复AppendBlob相关问题
旧版AppendBlobService已被废弃,改用新版API创建和操作Append Blob,示例代码:
from azure.storage.blob import BlobServiceClient import os def main(req): conn_str = os.environ.get("AzureWebJobsStorage") blob_service_client = BlobServiceClient.from_connection_string(conn_str) # 获取容器客户端 container_client = blob_service_client.get_container_client("your-container-name") # 获取Append Blob客户端 append_blob_client = container_client.get_blob_client("your-append-blob-name") # 若Blob不存在则创建 if not append_blob_client.exists(): append_blob_client.create_append_blob() # 追加数据 append_blob_client.append_block(b"Sample append data") return "Append operation completed"
验证步骤
- 本地运行函数,确认无导入错误和功能正常。
- 重新部署到Azure Function App。
- 在订阅环境测试函数,检查是否仍有异常。
内容的提问来源于stack exchange,提问作者Kiran Qureshi
相关产品推荐
相关产品推荐

