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

Airflow DAG中导入本地Python模块失败问题求助

解决Airflow DAG导入本地Python模块的问题

我刚踩过几乎一模一样的坑,Airflow 1.x版本的路径配置确实容易出问题,给你几个亲测有效的解决方案:

问题根源

Airflow默认只会把dags目录添加到Python的搜索路径(sys.path)中,而你的script目录和dags平级,不在这个路径范围内,所以Python解析DAG时找不到script.subfolder.local_module。

解决方案1:在DAG文件中手动添加路径

在my_DAG.py的最开头加上这段代码,把Airflow根目录(也就是包含dag和script的文件夹)加到Python路径里:

import sys
import os

# 获取当前DAG文件的绝对路径,往上回溯两级到airflow根目录
airflow_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if airflow_root not in sys.path:
    sys.path.append(airflow_root)

# 现在可以正常导入了
from script.subfolder import local_module
# 注意调用函数要带上模块名,或者直接导入具体函数
a = local_module.some_function()
# 也可以这样写:from script.subfolder.local_module import some_function; a = some_function()

解决方案2:设置全局PYTHONPATH环境变量

如果不想每个DAG都加路径代码,可以在启动Airflow服务前,把Airflow根目录加到PYTHONPATH里:

# 替换成你的airflow根目录实际路径
export PYTHONPATH=/path/to/your/airflow:$PYTHONPATH

# 然后启动Airflow服务
airflow webserver -p 8080
airflow scheduler

这样所有DAG都会自动识别到script目录下的模块,属于一劳永逸的方案。

额外注意点

  • 你示例里的a = some_function()会触发NameError: name 'some_function' is not defined,因为你只导入了模块,没有导入具体函数,记得要么用模块名.函数名调用,要么直接导入目标函数。
  • 确保script和subfolder下的__init__.py是空文件即可,不需要写任何内容,Python会自动把它们识别为可导入的包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:35:55