如何在python项目和气流之间共享代码?



我们有一个python项目结构如下,气流是一个新的:

├── python
│   ├── airflow
│   │   ├── airflow.cfg
│   │   ├── config
│   │   ├── dags
│   │   ├── logs
│   │   ├── requirements.txt
│   │   └── webserver_config.py
│   ├── shared_utils
│   │   ├── auth
│   │   ├── datadog
│   │   ├── drivers
│   │   ├── entities
│   │   ├── formatter
│   │   ├── helpers
│   │   └── system
...

我们有几个与shared_utils相同级别的包,一些是通用的库,一些是独立的后端服务。

我们希望保持气流部分的独立性,同时使公共图书馆受益。我们在PYTHONPATH中有python文件夹,python/气流也在PYTHONPATH中(目前气流不会从其他包中导入任何代码)。

我想知道我如何在气流包中调用shared_utils的代码,或者我应该如何组织项目结构以使其成为可能?

更新:

当我在PYTHONPATH中设置python和python/气流时似乎没有冲突,在将shared_utils的要求添加到气流后,它确实按预期工作。

我有一个项目,我有这个项目的布局

|
|-- dags/
|---- dag.py
|-- logs/
|-- plugins/
|---- __init__.py
|---- core.py
|-- airflow.cfg

然后我将核心内容保存在core。py中。

当我想使用core.py文件中的代码时,我会在dag.py中执行以下操作:

from core import <some function>

注意:

这是我的airflow.cfg文件,它注册了plugins文件夹,所以PythonVirtualOperator可以在plugins中找到代码。

[core]
dags_folder = {AIRFLOW_HOME}/dags

plugins_folder = {AIRFLOW_HOME}/plugins%

TLDR;

所以对于你的情况,我想你可以这样做在airflow.cfg:

plugins_folder = {AIRFLOW_HOME}/shared_utils%

您可以将shared_utils移动到python文件夹中的新文件夹my_package,然后将my_package路径添加到您的python路径:

# in your host
echo export PYTHONPATH="/path/to/python/my_package:$PYTHONPATH" >> ~/.profile
# in airflow docker image
ENV PYTHONPATH="/path/to/python/my_package"

现在您可以从所有python控制台的包中导入:

from shared_utils.auth import module_x

最新更新