Azure时间触发器函数__init__.py如何导入其他文件夹的类
Python Azure时间触发器函数自定义模块导入失败解决方案
报错根因
Azure Python函数默认的模块搜索路径仅覆盖host.json所在的函数应用根目录、Python环境依赖目录,单纯给子文件夹加__init__.py不会自动把自定义代码路径加入搜索范围;函数入口文件不属于可执行相对导入的包结构,因此两种导入写法都会报错。
可落地修复步骤
校准目录结构
确保所有文件按如下结构存放,host.json必须在最外层根目录,所有存放自定义代码的文件夹下都保留空的__init__.py文件:函数应用根目录/ ├── host.json ├── local.settings.json ├── requirements.txt ├── Project/ │ ├── __init__.py │ └── AWS/ │ ├── __init__.py │ └── S3_uploader.py └── 你的时间触发器函数目录/ ├── __init__.py # 函数运行入口 └── function.json注意:检查
.funcignore文件,不要把Project目录加入忽略列表,否则本地调试或发布时会漏传自定义代码。修改入口文件导入逻辑
打开时间触发器目录下的__init__.py,在所有自定义导入语句的最前面添加路径注册代码,彻底废弃相对导入写法(即带./..的导入语句,函数入口不支持该语法):import sys import os # 定位到host.json所在的根目录,加入Python模块搜索路径 function_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) sys.path.insert(0, function_root) # 再执行自定义模块导入 from Project.AWS.S3_uploader import S3_Uploader调试&发布校验
- 本地调试时终端必须切到
host.json所在的根目录执行func start启动,不要在子目录下运行启动命令,否则路径识别会出错。 - 发布到Azure云端时,确保
Project整个目录和函数目录、配置文件一起上传到站点根目录,不要只上传触发器函数文件夹。 - 自定义目录命名避开Python内置库、Azure SDK同名关键词(比如不要命名为
azure/logging/os),避免模块冲突。
- 本地调试时终端必须切到
内容的提问来源于stack exchange,提问作者afzde
相关产品推荐
相关产品推荐

