【发布时间】:2019-08-19 14:00:40
【问题描述】:
这实际上是两个问题合二为一。
我的AIRFLOW_HOME 的结构类似于
airflow
+-- dags
+-- plugins
+-- __init__.py
+-- hooks
+-- __init__.py
+-- my_hook.py
+-- another_hook.py
+-- operators
+-- __init__.py
+-- my_operator.py
+-- another_operator.py
+-- sensors
+-- utils
我一直在 https://github.com/airflow-plugins 关注 astronomer.io 的示例。我的自定义operators 使用我的自定义hooks,并且所有导入都相对于顶级文件夹plugins。
# my_operator.py
from plugins.hooks.my_hook import MyHook
但是,当我尝试将整个存储库移动到插件文件夹中时,运行 airflow list_dags 后出现导入错误,提示找不到 plugins。
我阅读了一些关于它的内容,显然 Airflow 将插件加载到其核心模块中,因此它们可以像导入一样被导入
# my_operator.py
from airflow.hooks.my_hook import MyHook
所以我将所有导入更改为直接从airflow.plugin_type 读取。不过,我收到另一个导入错误,这次说找不到my_hook。我每次都重新启动我的工作人员、调度程序和网络服务器,但这似乎不是问题。我查看了类似问题中提出的解决方案,但它们也不起作用。
官方文档也显示了https://airflow.apache.org/plugins.html 扩展AirflowPlugin 类的这种方式,但我不确定这个“接口”应该放在哪里。我也更喜欢拖放选项。
最后,我的代码库显然是 plugins 文件夹本身没有意义,但如果我将它们分开,测试变得不方便。每次在我的钩子/操作上运行单元测试时,我是否必须修改我的 Airflow 配置以指向我的存储库?测试自定义插件的最佳做法是什么?
【问题讨论】:
标签: airflow