如何使用 DAG 代码中的不可安装模块?

How to use non-installable modules from DAG code?

我有一个 Git 存储库,它(除其他外)在 airflow 目录中保存 Airflow DAG。除了 Airflow 的安装目录之外,我还有一个存储库的克隆。 airflow Git 中的目录由 AIRFLOW_HOME 配置变量指向。

我想允许从 airflow 文件夹外列出的存储库中的模块导入(请参阅下面的结构)。

<repo root>
   |_airflow
      |_dags
         |_dag.py
   |_module1
   |_module2
   |_...

所以在dag.py我可以做:

from module1 import Module1

目前,如果没有 tricks 似乎是不可能的,比如显式编辑 sys.path 这不是很优雅,必须在每个 dag 源文件中完成...

module1 中制作可安装包也是不可能的。

在这里重写讨论的结论


大体上,有两种可能的方法

  1. 将您的代码打包成 Airflow plugin
  2. 通过更新 PYTHONPATH 让您的代码可被 dag 定义文件解析进程发现。同样,我们有以下选项

    (a) 在系统级别 using bashrc / equivalent (once-and-for-all) or just export the updated PYTHONPATH 上为当前 bash 会话

    更新 PYTHONPATH

    (b) 以编程方式 update sys.path 在 DAG 定义文件的开头