You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow导入DAG报ModuleNotFoundError找不到my_project模块如何解决

问题排查与修复

你遇到的ModuleNotFoundError: No module named 'my_project'和PYTHONPATH配置本身无关,核心是目录结构、忽略规则、进程环境加载三个点的错误,按以下步骤修复即可:

1. 修正目录结构

你当前把DAG文件my_dag.py放在my_project业务包目录内是核心错误。Airflow递归解析DAG时,会将每个DAG文件所在的目录临时加入Python导入搜索路径,此时解析my_project目录下的DAG时,搜索路径会指向~/airflow/dags/my_project,你写的from my_project.common_modules.module1 import *会在当前my_project目录下再找一层my_project包,必然触发找不到模块的错误。

调整后的正确目录结构如下:

dags
| .airflowignore 
| my_dag.py  # DAG文件统一放在dags根目录,不要嵌套在自定义业务包目录内
| my_project
              | __init__.py
              | common_modules
              |              |  __init__.py
              |              | module1.py

2. 修正.airflowignore规则

你当前配置的my_project/common_modules/.*规则存在匹配逻辑错误:

  • Airflow的.airflowignore使用正则语法做路径匹配,.*会匹配任意长度的任意字符,这条规则会直接把common_modules目录下所有文件(包括module1.py)标记为忽略,DAG解析阶段不会加载这些模块
  • 如果你只是想忽略该目录下的隐藏文件,将规则修改为my_project/common_modules/\..*(转义点号,仅匹配.开头的隐藏文件)
  • 如果没有特殊忽略需求,直接删除这条规则即可

3. 确认Airflow进程实际加载的搜索路径

不要仅在当前shell下检查PYTHONPATH,如果你用systemd、sudo或者服务方式启动Airflow,进程不会加载当前用户的shell环境变量配置。写一个临时测试DAG验证实际加载的路径:

from airflow import DAG
from datetime import datetime
import sys

with DAG(dag_id="check_syspath", start_date=datetime(2024,1,1), schedule=None) as dag:
    for path in sys.path:
        print(path)

手动触发这个DAG,查看日志输出,如果你的dags目录绝对路径不在输出列表中,直接修改airflow.cfg的[core]区块配置,写绝对路径不要用~相对路径,避免用户上下文切换导致路径解析失败:

[core]
dags_folder = /home/你的实际用户名/airflow/dags
pythonpath = /home/你的实际用户名/airflow/dags

修改完成后重启scheduler和webserver进程生效。

额外避坑说明

如果你之前尝试把公共模块放到plugins目录,注意Airflow 2.x版本中plugins目录会被直接加入搜索路径根目录,导入时不需要加自定义前缀:

  • 模块放在plugins/common_modules/路径下时,导入语句直接写from common_modules.module1 import *即可
  • 不要额外加plugins或者自定义的包前缀,否则同样会触发模块找不到的错误

内容的提问来源于stack exchange,提问作者hobscrk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:24:24