将自定义python模块导入到dag文件中,而无需混合dag环境和sys.path?

时间:2019-11-06 18:50:47

标签: airflow

有什么方法可以将自定义的python模块导入dag文件,而无需混合dag环境和sys.path?不能使用

environ["PROJECT_HOME"] = "/path/to/some/project/files"
# import certain project files
sys.path.append(environ["PROJECT_HOME"])
import mymodule

因为sys.path在所有dag之间共享,因此如果要从不同位置导入名称不同的dag的模块,则会导致problems(例如dag定义之间的值共享)定义(如果有很多破折号,很难跟踪)。

使用packaged dags的文档(似乎是一种解决方案)似乎无法避免问题

  

该zip文件将插入到模块搜索列表(sys.path)的开头,因此驻留在同一解释器中的任何其他代码均可使用。

任何具有更多气流知识的人都知道如何处理这种情况?

*与链接到问题的不同之处在于对实现的关注程度较低

1 个答案:

答案 0 :(得分:0)

最终做了这样的事情:

if os.path.isfile("%s/path/to/specific/module/%s.py" % (PROJECT_HOME, file_name)):
    import imp
    f = imp.load_source("custom_module", "%s/path/to/specific/module/%s.py" % (PROJECT_HOME, file_name))
    df = f.myfunc(sparkSession, df)

根据SO帖子here,从已知路径显式获取所需的模块文件。