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

本地运行Airflow DAG文件时如何让Python识别模块层级?

问题描述

我按照Airflow官方的模块管理规范组织DAG代码,目录结构如下:

<PYTHONPATH目录>
| .airflowignore  # 仅在dags目录需要
| -- my_company
              | __init__.py
              | common_package
              |              |  __init__.py
              |              | common_module.py
              |              | subpackage
              |                         | __init__.py
              |                         | subpackaged_util_module.py
              |
              | my_custom_dags
                             | __init__.py
                             | my_dag1.py
                             | my_dag2.py
                             | base_dag.py

在Airflow环境中运行时,以下导入语句能正常工作:

from my_company.common_package.common_module import SomeClass
from my_company.common_package.subpackage.subpackaged_util_module import AnotherClass
from my_company.my_custom_dags.base_dag import BaseDag

但本地直接执行python my_company/my_custom_dags/my_dag1.py验证DAG时,出现模块找不到的错误:

Traceback (most recent call last):
  File "/[...]/my_company/my_custom_dags/my_dag1.py", line 1, in <module>
    from my_company.common_package.common_module import SomeClass
ModuleNotFoundError: No module named 'my_company'

请问如何调整运行方式,让Python识别模块上下文并找到对应包?

解决方案

方法1:临时设置PYTHONPATH环境变量

将包含my_company的父目录(即上述结构中的<PYTHONPATH目录>)添加到Python的模块搜索路径中,再执行脚本:

Linux/macOS

export PYTHONPATH=/实际路径/到/父目录:$PYTHONPATH
python my_company/my_custom_dags/my_dag1.py

Windows(CMD)

set PYTHONPATH=C:\实际路径\到\父目录;%PYTHONPATH%
python my_company\my_custom_dags\my_dag1.py

Windows(PowerShell)

$env:PYTHONPATH = "C:\实际路径\到\父目录;$env:PYTHONPATH"
python my_company\my_custom_dags\my_dag1.py

方法2:以模块方式运行脚本

切换到<PYTHONPATH目录>下,使用-m参数以模块形式执行DAG文件(无需加.py后缀):

cd /实际路径/到/父目录
python -m my_company.my_custom_dags.my_dag1

方法3:在脚本中手动添加路径

如果不想每次设置环境变量,可以在my_dag1.py的最顶部添加代码,自动将父目录加入搜索路径:

import sys
from pathlib import Path

# 获取包含my_company的父目录路径
root_dir = Path(__file__).resolve().parents[2]
sys.path.append(str(root_dir))

# 后续正常执行导入
from my_company.common_package.common_module import SomeClass

方法4:使用Airflow官方验证命令

Airflow提供了专门的DAG验证工具,比直接运行脚本更贴合生产环境逻辑:

  • 测试指定DAG:
airflow dags test my_dag_id 2024-01-01
  • 检查所有可加载的DAG:
airflow dags list

内容的提问来源于stack exchange,提问作者Kombajn zbożowy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:31:22