通过GitHub Actions部署Python版Azure Function App时遭遇ModuleNotFoundError: No module named 'azure.storage'错误
通过GitHub Actions部署Python版Azure Function App时遭遇ModuleNotFoundError: No module named 'azure.storage'错误
我完全能理解你的困惑——同样的代码用VS Code部署一切正常,换成GitHub Actions就出了依赖找不到的问题,这大概率是两种部署方式的依赖处理逻辑不一样导致的。
问题根源
你当前的GitHub Actions流程里,虽然在虚拟环境中安装了依赖,但手动用zip命令打包时,并没有把安装好的依赖包含到部署包中(还特意排除了venv目录)。而VS Code的Azure Functions部署工具会自动处理依赖的打包(或者触发Azure端的依赖安装),所以能正常运行。
Azure Functions的Python运行时会从项目根目录下的.python_packages目录加载依赖,你的流程里既没有生成这个目录,也没把依赖打包进去,导致函数运行时找不到azure.storage模块(这个模块是azure-storage-blob包的核心组成部分)。
解决方案:调整GitHub Actions流程,正确打包依赖
这里有两种可靠的修改方式,选其中一种就行:
方式1:使用Azure Functions Core Tools的func pack命令打包
这个是官方推荐的打包方式,会自动处理依赖和项目结构,避免手动打包的遗漏:
- 在
buildjob中添加安装Azure Functions Core Tools的步骤 - 用
func pack替代手动zip操作
修改后的build job关键步骤如下:
jobs: build: runs-on: ubuntu-latest permissions: contents: read steps: # 前面的checkout、setup-python、虚拟环境步骤保持不变 - name: Install Azure Functions Core Tools run: | curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs)-prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt update sudo apt install azure-functions-core-tools-4 - name: Install dependencies and pack project run: | pip install -r requirements.txt func pack --python --output release.zip - name: Upload artifact for deployment job uses: actions/upload-artifact@v4 with: name: python-app path: release.zip
方式2:手动将依赖安装到.python_packages目录后打包
如果不想安装Core Tools,可以直接把依赖安装到Azure Functions识别的目录,再一起打包:
修改Install dependencies步骤,将依赖安装到项目根目录的.python_packages下:
- name: Install dependencies run: pip install -r requirements.txt --target .python_packages/lib/site-packages
然后修改Zip artifact for deployment步骤,确保包含这个目录(如果需要排除venv,单独指定即可):
- name: Zip artifact for deployment run: zip release.zip ./* -r -x 'venv/*'
额外验证点
- 确认你的
requirements.txt里的azure-storage-blob版本兼容Python 3.11,不过从VS Code部署正常来看,这个应该没问题。 - 部署完成后,可以在Azure Portal的Function App里,进入
高级工具(Kudu),查看site/wwwroot目录下是否有.python_packages文件夹,以及里面是否包含azure/storage相关文件,以此验证依赖是否正确部署。
备注:内容来源于stack exchange,提问作者Mart
相关产品推荐
相关产品推荐

