我们有一个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