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

如何解决Airflow DAG文件中的ModuleNotFoundError模块导入问题?

问题分析与修复方案

错误核心原因

你遇到的ModuleNotFoundError本质是Airflow模块加载的路径上下文问题:
虽然你在project_dag.py中把project_dir添加到了sys.path,但Airflow的DAG扫描机制会遍历所有.py文件,可能直接单独加载factory_config.py,此时sys.path中并没有project_dir,导致无法找到同目录的ci_config;另外,即使通过project_dag.py导入factory_config,你用的绝对导入语法依赖sys.path的配置,但该路径添加仅在project_dag.py的上下文生效,无法传递到factory_config的加载过程。


具体修复方案

方案1:使用相对导入(最规范的包内导入方式)

由于factory_config.py和ci_config.py属于同一个project_dir包(目录下已有__init__.py),直接用Python相对导入语法即可,无需依赖sys.path配置:

# factory_config.py 修改后的代码
import os

import configs as table_configs
from .ci_config import var3  # 点号表示当前包下的模块

方案2:配置Airflow全局PYTHONPATH(一劳永逸)

将dags/organization_dir目录添加到Airflow的PYTHONPATH环境变量中:

  • 本地部署:修改Airflow启动脚本,添加export PYTHONPATH="/home/airflow/gcs/dags/organization_dir:$PYTHONPATH"
  • Cloud Composer(从路径判断你使用GCS环境):在环境变量配置中新增PYTHONPATH,值设为/home/airflow/gcs/dags/organization_dir

配置完成后,所有文件可直接用完整包路径导入,还能移除代码中硬编码的sys.path配置:

# project_dag.py 可简化为
from airflow import DAG
from project_dir.factory_config import var1,var2
from project_dir.common_package import DagPipelineFactory

# factory_config.py 可写为
import os
import configs as table_configs
from project_dir.ci_config import var3

方案3:临时应急——在factory_config.py中添加路径

如果不想修改导入语法,可在factory_config.py开头手动添加当前目录到sys.path:

# factory_config.py 开头新增代码
import os
import sys

current_dir = os.path.abspath(os.path.dirname(__file__))
sys.path.insert(0, current_dir)

# 原有导入代码保持不变
import configs as table_configs
from ci_config import var3

该方式会产生代码冗余,仅适合临时调试,不推荐长期使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:16:01