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

Airflow DAG无法导入根目录下自定义模块的问题咨询

问题分析与解决方法

你的导入逻辑本身是合理的,但之所以出现ModuleNotFoundError: No module named 'myprojects',核心原因是Airflow默认的PYTHONPATH并没有包含你的airflow根目录。

默认情况下,Airflow只会把$AIRFLOW_HOME/dags目录添加到PYTHONPATH中,而你的myprojects文件夹直接放在airflow根目录下,不在DAG文件夹的层级里,所以Python解释器找不到这个包。好在你已经给各个文件夹添加了__init__.py,这一步是正确的,不用再调整。

下面是几种可行的解决方法,按推荐程度排序:

1. 修改Airflow配置文件(推荐)

直接在Airflow的核心配置中添加PYTHONPATH路径:

  • 找到你的airflow.cfg文件(通常在$AIRFLOW_HOME目录下)
  • 定位到[core]章节,找到pythonpath配置项(如果没有就手动添加)
  • 设置为你的airflow根目录路径,比如:
    [core]
    pythonpath = /path/to/your/airflow
    
  • 修改完成后,重启Airflow的webserver和scheduler服务,让配置生效。之后你就能正常使用from myprojects.projectone import tasks这样的导入语句了。

2. 通过环境变量设置PYTHONPATH

如果不想修改配置文件,可以在启动Airflow服务前设置环境变量:

  • 在终端中执行:
    export PYTHONPATH="$AIRFLOW_HOME:$PYTHONPATH"
    
  • 随后启动Airflow服务(webserver、scheduler等),此时进程会继承这个PYTHONPATH配置。
  • 如果是用systemd、supervisord等服务管理器运行Airflow,需要在服务配置文件中添加这个环境变量。比如在systemd的服务文件中添加:
    Environment="PYTHONPATH=/path/to/your/airflow:$PYTHONPATH"
    

3. 在DAG文件中手动添加路径(临时方案)

如果只是临时测试,不想改动全局配置,可以在mydag.py的最顶部添加以下代码,手动把airflow根目录加入PYTHONPATH:

import sys
from pathlib import Path

# 获取当前DAG文件的父目录的父目录(即airflow根目录)
airflow_root = Path(__file__).parent.parent
sys.path.append(str(airflow_root))

这种方法的缺点是每个需要导入外部包的DAG都要重复添加代码,不适合长期使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:43:11