我无法在气流使用的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)
只需__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)
将您的气流回家路径添加到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)