【发布时间】:2019-12-31 17:08:15
【问题描述】:
我有一个 Git 存储库,其中(除其他外)将 Airflow DAG 保存在 airflow 目录中。除了 Airflow 的安装目录之外,我还有一个存储库的克隆。 Git 中的airflow 目录由AIRFLOW_HOME 配置变量指向。
我希望允许从存储库中列出的模块导入 外部 airflow 文件夹(请参阅下面的结构)。
<repo root>
|_airflow
|_dags
|_dag.py
|_module1
|_module2
|_...
所以在dag.py我可以做到:
from module1 import Module1
目前,如果没有 tricks 似乎不可能像显式编辑 sys.path 这样不太优雅,必须在每个 dag 源文件中完成...
从module1 中制作一个可安装的包也是不可能的。
【问题讨论】:
-
为什么不能把它们做成一个包呢?是代码隐私问题吗?如果是这样,它需要保密到什么程度?
-
@PirateNinjas:你猜对了——问题之一是代码隐私。
-
我只知道两种方法(我假设您已经知道这两种方法):[1] 将您的代码打包到 Airflow plugin [2] 通过更新 python 路径使代码可发现;但除了以编程方式更新
sys.path,我们还可以(我个人这样做)在.bashrc中一劳永逸地更新PYTHONPATH -
另一种方法是混淆路径,将代码混淆,以便您可以将其部署为包或直接作为代码部署。您可以通过使用 cython 将您的包构建到共享对象文件中来做到这一点。这不是一个完美的解决方案,但我认为它可以解决您的问题。
-
@y2k-shubham:确实,也许 Airflow 插件是要走的路。一个执行路径操作的基类可以用于为我创建的所有继承 DAG 设置环境。请将评论转换为答案,以便我接受。
标签: python-3.x git airflow python-module