Airflow DAG 无法在根文件夹中导入模块

时间:2021-05-19 14:54:13

标签: airflow

我有以下文件夹结构

airflow/
     |_dag/

据我所知,airflow 使用“airflow”文件夹作为根目录,即我假设所有放在“airflow”中的东西都可以导入。

假设我有不同的项目,任务放置在以下结构中

airflow/
    |_dag/
    |   |_ mydag.py
    |
    |_myprojects/
           |_projectone/
           |      |_tasks/
           |           |_ mytask.py
           |_projecttwo/
                  |_tasks/
                      |_ mytask.py

然后我会假设我在 mydag.py 中应该能够从给定的项目中导入 mytask,例如

#mydag.py
from myprojects.projectone import tasks

但我得到一个 DAG import error; ModuleNotFoundError: No module named 'myprojects'

这是可行的,还是我应该(以某种方式)改变气流 PYTHONPATH(在这种情况下,在哪里完成?)

注意,我在文件夹中创建了 __init__.py 个文件。

1 个答案:

答案 0 :(得分:0)

一种选择是在导入 myproject 之前设置路径:

#mydag.py
import sys

# it's important for path being inserted before importing `myproject`
sys.path.insert(0, "..")

from myproject import tasks

第二个选项是将 myproject 移动到 dag 文件夹下:

airflow
   +-- dag
        +--- myproject

第三个选项是将一些逻辑移动到 plugins/ 文件夹中。

https://airflow.apache.org/docs/apache-airflow/stable/modules_management.html