簡體   English   中英

如何在 python 項目和 airflow 之間共享代碼?

[英]how to share code between python project and airflow?

我們有一個 python 項目結構如下,airflow 是一個新的:

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

我們還有其他幾個 package 和 shared_utils 同級別的,有的是通用庫,有的是獨立的后端服務。

我們希望保持 airflow 部分獨立,同時讓公共圖書館受益。 我們在 PYTHONPATH 中有 python 文件夾,python/airflow 也在 PYTHONPATH 中(目前 airflow 不從其他包導入任何代碼)。

我想知道如何從我的 airflow dags 中的 shared_utils 調用代碼,或者我應該如何組織項目結構以使其成為可能?

更新:

當我在 PYTHONPATH 中設置 python 和 python/airflow 時似乎沒有沖突,在將 shared_utils 的要求添加到 airflow 之后,它確實按預期工作。

我有一個項目,我有這個項目的布局

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

然后我將核心內容保存在 core.py 中。

當我想使用 core.py 文件中的代碼時,我將在 dag.py 中執行以下操作:

from core import <some function>

筆記:

這是我的 airflow.cfg 文件,它注冊了插件文件夾,因此 PythonVirtualOperator 可以在插件中找到代碼。

[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 控制台中從您的 package 導入:

from shared_utils.auth import module_x

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM