将自定义python模块导入dag文件,而不混合dag环境和sys.path



有没有办法在不混合dag环境和sys.path的情况下将自定义python模块导入dag文件?不能使用类似的东西

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

因为sys.path在所有dag之间共享,如果想要从不同地方导入对不同dag定义具有相同名称的模块(如果有很多dag,这很难跟踪(,这会导致问题(例如,dag定义之间的值共享(。

使用打包dag的文档(这似乎是一个解决方案(似乎无法避免问题

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

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

*与关联问题的不同之处在于,实现的具体程度较低

最终做了这样的事情:

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帖子,从已知路径显式地获取所需的模块文件。

最新更新