有什么方法可以将自定义的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)的开头,因此驻留在同一解释器中的任何其他代码均可使用。
任何具有更多气流知识的人都知道如何处理这种情况?
*与链接到问题的不同之处在于对实现的关注程度较低
答案 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,从已知路径显式获取所需的模块文件。