![](/img/trans.png)
[英]How do I share common Python/Jython code between a Python and Java project with Pydev/Eclipse?
[英]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.