Airflow调度DAG报错ModuleNotFoundError:找不到Authentication模块
Airflow自定义模块导入失败(ModuleNotFoundError)的解决办法
这大概率是Python模块路径配置问题,和Airflow本身无关,核心是Airflow运行时的Python解释器找不到你的自定义模块路径。以下是针对性解决建议:
1. 规范目录结构与导入语法
首先确保项目目录下存在必要的__init__.py文件(空文件即可),让Python识别为可导入的模块包。假设你的项目结构如下:
youtubecollection01/ ├── src/ │ ├── __init__.py │ ├── __main__.py │ ├── Authentication.py │ ├── ChannelClass.py │ └── Common.py └── dags/ └── your_dag_file.py
然后修改__main__.py中的导入语句:
- 用相对导入(同项目内模块推荐):
from .Authentication import 你的认证类 from .ChannelClass import ChannelClass from .Common import 你的通用工具类 - 或用绝对导入:
from youtubecollection01.src.Authentication import 你的认证类
2. 将项目根目录加入Python路径
Airflow运行时不会自动把你的项目目录加入sys.path,可以通过两种方式配置:
- 方式一:在DAG文件中动态添加
在你的DAG文件开头加入以下代码,根据实际目录层级调整路径:import sys from pathlib import Path # 获取项目根目录的绝对路径(示例:假设dag文件在dags目录,根目录是dags的父目录) PROJECT_ROOT = Path(__file__).parent.parent sys.path.append(str(PROJECT_ROOT)) - 方式二:修改Airflow配置
编辑airflow.cfg,找到PYTHONPATH配置项,添加你的项目根目录路径:
修改完成后重启Airflow调度器与Worker服务,让配置生效。PYTHONPATH = /实际路径/youtubecollection01
3. 正确使用Airflow Plugins目录
不要直接把整个项目移到plugins目录——Airflow的plugins目录是用于存放自定义算子、钩子、传感器等Airflow专属插件的,不是普通Python项目的存放位置。如果要通过plugins目录管理自定义模块,需将src目录作为子目录放到plugins下,同时确保plugins目录已在sys.path中(Airflow默认会自动添加),再调整导入路径。
4. 验证导入有效性
- 本地先运行
__main__.py,确认导入逻辑无错误; - 在Airflow运行环境中执行命令:
python -c "import youtubecollection01.src.Authentication",如果无报错,说明路径配置正确,否则继续排查路径问题。
内容的提问来源于stack exchange,提问作者Maryam-AM
相关产品推荐
相关产品推荐

