Airflow2.3.0升级Amazon Provider至5.0.0后导入STATE_COLORS失败求助
解决Airflow 2.3.0与apache-airflow-providers-amazon==5.0.0的版本冲突及STATE_COLORS导入错误
问题概述
- 需求:需在SQL文件中运行Redshift多条SQL语句,因此必须使用
apache-airflow-providers-amazon==5.0.0,已在docker-compose的_PIP_ADDITIONAL_REQUIREMENTS中配置该版本及其他依赖。 - 错误:Airflow启动时报错:
cannot import name 'STATE_COLORS' from 'airflow.settings'。 - 背景:此前使用
apache-airflow-providers-amazon==3.0.0可正常运行,但该版本不支持Redshift多SQL语句功能;Airflow 2.3.0的官方约束文件要求Amazon Provider版本为3.3.0,与所需的5.0.0存在版本冲突。
原因分析
apache-airflow-providers-amazon==5.0.0是为Airflow 2.4.0及以上版本设计的,Airflow 2.3.0的airflow.settings模块中不存在STATE_COLORS变量,同时官方约束文件限制了Amazon Provider的版本范围,强行升级会触发依赖不兼容,导致导入错误。
解决方案
1. 升级Airflow到兼容版本(推荐)
直接将Airflow版本升级到2.4.0或更高版本,这些版本的官方约束文件已支持apache-airflow-providers-amazon==5.0.0及以上,从根本解决依赖冲突:
- 修改docker-compose中的Airflow镜像版本,例如使用
apache/airflow:2.4.0 - 确保
_PIP_ADDITIONAL_REQUIREMENTS中仅保留apache-airflow-providers-amazon==5.0.0及其他必要依赖,无需额外处理约束文件
2. 绕过约束强制安装(临时方案)
若无法升级Airflow,可通过强制指定版本绕过官方约束,但可能引发其他依赖问题,需严格测试:
在docker-compose的_PIP_ADDITIONAL_REQUIREMENTS中配置:
_PIP_ADDITIONAL_REQUIREMENTS: "apache-airflow-providers-amazon==5.0.0 --constraint https://raw.githubusercontent.com/apache/airflow/constraints-2.3.0/constraints-3.3.0.txt"
或者自定义约束文件,移除对apache-airflow-providers-amazon的版本限制,再指定该文件进行安装。
3. 手动添加缺失变量(不推荐)
仅临时修复导入错误时,可手动在Airflow 2.3.0的airflow/settings.py中添加STATE_COLORS变量,但属于hack手段,生产环境不建议使用:
# 在airflow/settings.py中插入以下内容 STATE_COLORS = { "success": "#10b981", "failed": "#ef4444", "running": "#f59e0b", "queued": "#6b7280", "up_for_retry": "#f59e0b", "up_for_reschedule": "#f59e0b", "skipped": "#6b7280", "scheduled": "#6b7280", "none": "#6b7280" }
内容的提问来源于stack exchange,提问作者Kar
相关产品推荐
相关产品推荐

