Python版Azure Functions本地测试报H2O模块不可用错误
问题背景
开发基于Python运行时、调用H2O模块的Azure Functions应用时出现依赖加载问题:已在requirements.txt中声明h2o==3.32.0.2依赖,依赖已成功安装到项目虚拟环境,手动激活虚拟环境运行相关代码无异常,但本地测试Azure Functions时触发H2O模块不可用报错。
当前运行环境信息:
- 操作系统:Windows 10
- Python版本:3.9
复现材料
最小复现代码
import datetime import logging import h2o import azure.functions as func def main(mytimer: func.TimerRequest) -> None: utc_timestamp = datetime.datetime.utcnow().replace( tzinfo=datetime.timezone.utc).isoformat() if mytimer.past_due: logging.info('The timer is past due!') logging.info('Python timer trigger function ran at %s', utc_timestamp)
requirements.txt配置
h2o==3.32.0.2
报错截图

根因说明
- Windows环境下Azure Functions Core Tools启动时,不会自动继承当前终端激活的虚拟环境的包搜索路径,哪怕手动激活了虚拟环境,函数工作进程默认会用全局Python解释器加载依赖,找不到装在虚拟环境里的h2o包。
h2o==3.32.0.2发布时间早于Python 3.9正式发布时间,该版本未做Python 3.9适配,在3.9版本下存在包路径识别异常。
修复方案
按顺序执行以下操作即可解决问题:
- 强制指定Azure Functions使用虚拟环境内的Python解释器
在项目根目录下的local.settings.json文件中添加配置,明确指定Python依赖搜索路径:
配置后启动函数时,工作进程会自动从虚拟环境的site-packages目录加载依赖。{ "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python", "PYTHONPATH": ".venv/Lib/site-packages" } } - 升级H2O到适配Python 3.9的版本
将requirements.txt中的h2o版本修改为h2o>=3.34.0.1,该版本是首个正式适配Python 3.9的稳定版,修改后在激活的虚拟环境中执行pip install -r requirements.txt --upgrade完成升级。 - 清理本地运行缓存后重启
先删除项目根目录下的.python_packages缓存文件夹,再执行func start重新启动函数即可正常加载h2o模块。
内容的提问来源于stack exchange,提问作者The6thSense
相关产品推荐
相关产品推荐

