2017-07-13 19 views
2

我无法将通用代码移到气流使用的dag目录之外。我查看了airflow source,发现imp.load_source气流相对导入外部/ dag目录

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

── airflow_home 
    |──── dags 
    │ ├── dag_1.py 
    │ └── dag_2.py 
    ├── common 
     ├── foo.py 
     └── bar.py 
+0

做相同的应用程序模块的所有这些文件夹中的一部分?或不同的模块。以防万一来自同一个应用程序模块,您可以使用相对路径来导入。 – Haranadh

+0

@Haranadh是的。我更新了图表以显示airflow_home目录。 –

+0

我无法在评论中回答。我发布了我的详细答案。如果你喜欢它。请注册。 :) – Haranadh

回答

1

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

示例文件夹结构,可能是因为:

── airflow_home 
    ├── __init__.py 
    |──── dags 
    │ ├── __init__.py 
    │ ├── dag_1.py 
    │ └── dag_2.py 
    ├── common 
     ├── __init__.py 
     ├── foo.py 
     └── bar.py 

dag_1.py代码可以为:

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

def main(): 
    bar_test() 

main() 

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

而且bar.py代码

def bar_test(): 
    print "bar hara" 
+0

@ connor-ameres;希望这个答案有帮助。如是。请接受我的回答。让我知道它是否在您的设置不起作用。 – Haranadh