如何使用Python在Airflow DAG中导入外部脚本?

时间:2019-05-14 16:18:20

标签: python python-3.x python-import airflow

我具有以下结构:

enter image description here

我尝试将脚本导入inbound_layer的某些文件中,如下所示:

import calc

但是我在Airflow网站上收到以下错误消息:

enter image description here

有什么主意吗?

3 个答案:

答案 0 :(得分:1)

对于气流DAG,在导入自己的模块时,需要确保以下两项:

  1. 模块在哪里?您需要找到气流文件夹中的根路径在哪里。例如,在我的开发框中,文件夹为:
      

    〜/ projects / data / airflow / teams / team_name / projects / default / dags / dag_names / dag_files.py

根源是气流,所以如果我将模块my_module放入

  

〜/ projects / data / airflow / teams / team_name / common

然后我需要使用

from teams.team_name.common import my_module

在您的情况下,如果根目录是 bi 的上层文件夹,并且将calc脚本放在bi/inbound_layer/test.py中,则可以使用:

from bi.inbound_layer.test import calc
  1. 并且必须确保目录结构中有\__init\__.py个文件,导入才能正常运行。路径中的每个文件夹中都应该有一个空文件\__init\__.py。它指示此目录是气流包装的一部分。您可以使用 bi 下的touch \__init\__.py(cli)和_inbound_layer_文件夹来创建空的__init\__.py

答案 1 :(得分:1)

Airflow 默认将 Airflow 主目录中的 dags/, plugins/, and config/ 目录添加到 PYTHONPATH,因此您可以例如在 commons 文件夹下创建文件夹 dags,在那里创建文件({{1 }})。假设脚本有一些类 (scriptFileName),您想在 GetJobDoneClass 中导入,您可以这样做:

DAG

答案 2 :(得分:0)

我需要在ren.py的顶部插入以下脚本:

import sys, os
from airflow.models import Variable

DAGBAGS_DIR = Variable.get('DAGBAGS_DIR')
sys.path.append(DAGBAGS_DIR + '/bi/inbound_layer/')

这样,我就可以使用当前的文件夹包。