我的Python项目的结构大致如下:
./code
./code/pipeline_xyz.py
./code/pipeline_xyz_test.py
./...
./code/utils.py
./definitions.py
管道依赖于utils.py
,它也位于目录code
中。在definitions.py
中,我获取了所有代码都使用的根目录的绝对目录。
当我将code_pipeline_*[^test].py
复制到Airflow的dags
文件夹时,由于缺少模块definitions
,它无法运行。
处理这种设置的推荐方法是什么?我应该为此创建一个静态文件夹(在项目目录之外),还是可以将定义和管道的结构复制到dags
?
答案 0 :(得分:0)
我个人更喜欢众所周知的结构:
airflow-example-dags git:(master) tree -L 3
.
├── Dockerfile
├── LICENSE
├── dags
│ ├── example-dag.py
│ └── example_bash_operator.py
├── packages.txt
├── plugins
│ └── example-plugin.py
└── requirements.txt
2 directories, 7 files
或者您可以在此处airflow-example-dags
进行检查答案 1 :(得分:0)
基本上,dags
文件夹已添加到PYTHONPATH。因此,所有模块定义都应相对于dags
文件夹。例如,如果您将文件复制到dags
文件夹中,如下所示:
/home/airflow/dags/pipeline_xyz_test.py
/home/airflow/dags/utils.py
/home/airflow/dags/definitions.py
在pipeline_xyz_test.py
位于import definitions.test_class1
内的test_class1
中,您可以执行definitions.py
。