发布到Azure Function App后ML模型无法运行、无法获取输出如何解决?
Azure Function Python部署ML模型模块找不到问题解决方案
直接按照以下步骤排查即可解决问题:
- 首先确认自定义模块存放与导入规范
你自己编写的ML相关模块、模型权重文件,要么和触发函数的__init__.py放在同一文件夹下,要么放在项目根目录的.site-packages文件夹中(该路径为Azure Function Python运行时专门识别的自定义包路径)。如果模块存放在子文件夹内,需要在子文件夹下新建空的__init__.py文件将其标记为Python可识别的包,导入时遵循绝对导入规则:比如根目录下ml文件夹中的predict.py模块,导入写法为from ml import predict。 - 检查部署包完整性
发布到Azure时必须上传整个Function App项目根目录,根目录下必须包含host.json、requirements.txt、你的函数文件夹、自定义模块文件夹,不能只单独上传函数文件夹。部署前可以在本地安装Azure Functions Core Tools,切到项目根目录运行func start做本地测试,本地运行正常再发布到Azure,避免漏传文件。 - 强制添加搜索路径快速修复
在函数的__init__.py文件最开头添加以下代码,强制把项目路径加入Python模块搜索路径,可直接解决大部分路径类导入错误:import sys, os # 若模块和__init__.py同目录用这个 sys.path.append(os.path.dirname(os.path.abspath(__file__))) # 若模块在项目根目录,比__init__.py高一级用下面这个 # sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) - 排查第三方依赖问题
你在Jupyter中使用的所有第三方库,都要完整写入项目根目录的requirements.txt文件中,版本尽量和本地测试环境保持一致,Azure部署时会自动根据该文件安装依赖,缺失依赖也会抛出模块找不到的报错。部署后如果还有问题,可以进入Azure门户对应函数应用的「开发工具>高级工具(Kudu)」,进入Debug Console后到/home/site/wwwroot目录运行pip list,确认所有依赖都已安装成功。 - 查看完整日志定位报错
进入Azure门户对应函数应用的「监视>日志流」,触发函数运行时可以看到完整的报错栈,能直接定位到具体报错的代码行,比测试页面返回的简略错误信息更准确。
内容的提问来源于stack exchange,提问作者Bhawna Pareta
相关产品推荐
相关产品推荐

