Azure Function App(Linux消耗计划)部署后无法导入adal模块
针对你遇到的ModuleNotFoundError: No module named 'adal'问题,核心是Azure Pipelines部署时未让Oryx正确处理Python依赖安装,或部署结构不符合Oryx要求,以下是具体遗漏的配置和修复步骤:
未触发Oryx的依赖构建流程
VS Code部署时Oryx会自动检测项目根目录的requirements.txt并安装依赖,但Azure Pipelines默认上传压缩包的方式可能跳过该步骤。需在部署任务中启用Oryx构建:使用AzureFunctionApp@1任务时,添加enableoryxbuild: true参数,同时指定对应Python运行时栈(如runtimeStack: 'PYTHON|3.9'),让Oryx在部署阶段自动读取requirements.txt并安装包括adal在内的所有依赖。错误打包site-packages目录
无需手动打包site-packages,Oryx会根据requirements.txt在Azure Linux环境下重新编译安装兼容的依赖包,本地打包的site-packages可能与云端环境不兼容,反而干扰Oryx的正常构建。正确做法是仅打包项目代码和requirements.txt,不包含site-packages。缺少正确的requirements.txt文件
确保项目根目录存在requirements.txt,并明确列出所有依赖:adal>=1.2.7 requests>=2.28.0 # datetime、logging、json为Python内置模块,无需添加Oryx只有读取到该文件,才会自动安装对应依赖包。
Function App运行时配置缺失
在Azure Portal的Function App配置中,确认FUNCTIONS_WORKER_RUNTIME已设置为python,否则Oryx不会按Python环境处理依赖安装和运行时加载。部署任务的包路径配置错误
在Pipelines的部署任务中,package参数应指向项目代码根目录(或包含代码和requirements.txt的压缩包),而非包含site-packages的压缩包。示例配置:- task: AzureFunctionApp@1 inputs: azureSubscription: '<你的订阅>' appType: functionAppLinux appName: '<你的Function App名称>' package: '$(System.DefaultWorkingDirectory)/**/*.zip' # 确保zip包仅包含代码和requirements.txt runtimeStack: 'PYTHON|3.9' enableoryxbuild: true
内容的提问来源于stack exchange,提问作者Wojtas.Zet

