Azure Python函数应用无法识别模块,求助解决方法
Azure Python函数部署后模块找不到问题排查与解决
核心原因
Azure Functions运行时默认不会自动识别你手动创建的虚拟环境,即便SSH中激活环境并安装了依赖,函数进程仍可能使用系统默认Python环境,导致无法找到虚拟环境内的模块。
解决步骤
配置运行时环境变量
- 在SSH中执行
myenv/bin/python --version确认虚拟环境Python版本,记录虚拟环境site-packages路径(如/home/site/wwwroot/myenv/lib/python3.9/site-packages,替换3.9为你的版本)。 - 进入Azure门户函数应用的配置→应用程序设置,添加两个环境变量:
PYTHONPATH:值设为上述site-packages路径WEBSITE_PYTHON_PATH:值设为虚拟环境Python可执行路径,如/home/site/wwwroot/myenv/bin/python
- 在SSH中执行
重新安装依赖
激活虚拟环境后,直接执行以下命令安装依赖(无需指定target,会自动安装到虚拟环境site-packages):source myenv/bin/activate pip install -r requirements.txt检查文件结构与导入语句
- 确保
requirements.txt放在函数根目录/home/site/wwwroot/下,而非子函数目录。 - 确认
__init__.py中的导入语句为绝对导入(如import requests),避免错误的相对导入语法。
- 确保
强制重启函数应用
在Azure门户函数应用概览页点击重启,等待配置完全生效(不要仅在SSH中重启进程)。验证环境有效性
可添加测试函数打印运行时信息,确认环境配置生效:import sys import datetime import logging import pip import azure.functions as func def main(mytimer: func.TimerRequest) -> None: utc_timestamp = datetime.datetime.utcnow().replace( tzinfo=datetime.timezone.utc).isoformat() # 打印Python路径和已安装包 logging.info(f"Current Python path: {sys.path}") installed_pkgs = [pkg.key for pkg in pip.get_installed_distributions()] logging.info(f"Installed packages: {installed_pkgs}") if mytimer.past_due: logging.info('The timer is past due!') logging.info('Python timer trigger function ran at %s', utc_timestamp)触发函数后查看日志,确认虚拟环境site-packages已在Python路径中,且目标模块存在于已安装包列表。
内容的提问来源于stack exchange,提问作者Marek
相关产品推荐
相关产品推荐

