如何在Python项目与Airflow间共享代码及优化项目结构?
在Airflow DAG中复用项目通用库的解决方案
项目结构
├── python │ ├── airflow │ │ ├── airflow.cfg │ │ ├── config │ │ ├── dags │ │ ├── logs │ │ ├── requirements.txt │ │ └── webserver_config.py │ ├── shared_utils │ │ ├── auth │ │ ├── datadog │ │ ├── drivers │ │ ├── entities │ │ ├── formatter │ │ ├── helpers │ │ └── system ...
需求背景
与shared_utils同级还有其他若干包,部分为通用库,部分为独立后端服务。我们希望保持Airflow模块独立,同时复用通用库代码。目前已将python目录及python/airflow目录加入PYTHONPATH,但Airflow尚未能引入其他包的代码。
可行解决方案(已验证)
经过实际测试,以下方式可实现需求且无冲突:
- 保留现有项目结构,继续同时将
python和python/airflow目录加入PYTHONPATH - 在Airflow目录下的
requirements.txt中添加shared_utils依赖的所有外部包(如果shared_utils有依赖的话) - 在DAG文件中直接通过绝对导入调用
shared_utils的代码,示例:
# 在DAG文件中导入shared_utils的模块 from shared_utils.auth import validate_token from shared_utils.datadog import submit_monitoring_data
原理说明
将python目录加入PYTHONPATH后,Python会将其识别为根模块目录,shared_utils作为该目录下的一级包可被直接导入;同时python/airflow在PYTHONPATH中能保证Airflow自身的配置、DAG等文件正常加载,两者共存不会产生冲突。
内容的提问来源于stack exchange,提问作者seaguest
相关产品推荐
相关产品推荐

