气流相对导入外/ dag目录

Con*_*res 7 python airflow

我无法在气流使用的dag目录之外移动公共代码.我查看了气流源并找到了imp.load_source.

是否可以使用imp.load_source加载dag目录之外的模块?在下面的示例中,这将从公共目录导入foo或bar.

?? airflow_home
     |???? dags
     ?   ??? dag_1.py
     ?   ??? dag_2.py
     ??? common
         ??? foo.py
         ??? bar.py
Run Code Online (Sandbox Code Playgroud)

小智 7

除了添加文件之外的其他方法__init__.py是在 dag 脚本顶部添加以下包含内容:

import sys
import os
sys.path.insert(0,os.path.abspath(os.path.dirname(__file__)))
Run Code Online (Sandbox Code Playgroud)


Har*_*adh 6

只需__init__.py在所有3个文件夹中添加文件.它应该工作.事实上我文件夹结构中的每个文件夹都有__init__.py.我可以运行代码并查看输出.

示例文件夹结构可以是:

?? airflow_home
     ??? __init__.py
     |???? dags
     ?   ??? __init__.py
     ?   ??? dag_1.py
     ?   ??? dag_2.py
     ??? common
         ??? __init__.py
         ??? foo.py
         ??? bar.py
Run Code Online (Sandbox Code Playgroud)

dag_1.py代码可以是:

from stackoverflow.src.questions.airflow_home.common.bar import bar_test

def main():
    bar_test()

main()
Run Code Online (Sandbox Code Playgroud)

这个代码的和平我从我的运行pycharm.你airflow_homepycharm中的文件夹路径是stackoverflow/src/questions/airflow_home/

bar.py代码是

def bar_test():
    print "bar hara"
Run Code Online (Sandbox Code Playgroud)


Har*_*ana 6

将您的气流回家路径添加到PYTHONPATH

export AIRFLOW_HOME=/usr/local/airflow
export PYTHONPATH="${PYTHONPATH}:${AIRFLOW_HOME}"
Run Code Online (Sandbox Code Playgroud)

文件

ENV AIRFLOW_HOME=/usr/local/airflow
ENV PYTHONPATH "${PYTHONPATH}:${AIRFLOW_HOME}"
Run Code Online (Sandbox Code Playgroud)