Airflow导入GCS相关库遇protobuf版本冲突,求助解决方法
解决Airflow GCS库导入时的protobuf版本冲突问题
我要创建Airflow DAG实现文件与云存储的传输,导入以下GCS相关库时出现版本冲突错误:
from airflow.providers.google.cloud.operators.gcs import GCSCreateBucketOperator, GCSDeleteBucketOperator from airflow.providers.google.cloud.operators.gcs import GCSCreateBucketOperator from airflow.providers.google.cloud.transfers.gcs_to_local import GCSToLocalFilesystemOperator from airflow.providers.google.cloud.transfers.local_to_gcs import LocalFilesystemToGCSOperator
错误信息如下:
pkg_resources.ContextualVersionConflict: (protobuf 4.21.9 (/opt/anaconda3/lib/python3.9/site-packages), Requirement.parse('protobuf<4.0.0dev'), {'google-cloud-secret-manager'})
我已经尝试执行 pip install googleapis-common-protos --upgrade,但问题仍未解决。
可行解决方案
1. 降级protobuf到兼容版本
直接安装符合google-cloud-secret-manager要求的protobuf版本,比如3.x系列的稳定版:
pip install protobuf==3.20.3
这个版本既满足<4.0.0dev的要求,也能兼容Airflow GCS相关库的依赖。
2. 用虚拟环境隔离依赖
避免全局环境的依赖冲突,创建独立虚拟环境安装所需包:
# 创建虚拟环境 python -m venv airflow-gcs-env # Linux/macOS激活环境 source airflow-gcs-env/bin/activate # Windows激活环境 airflow-gcs-env\Scripts\activate # 安装Airflow及GCS提供者 pip install apache-airflow pip install apache-airflow-providers-google
虚拟环境会自动安装所有兼容的依赖版本,不会影响系统全局的包。
3. 更新google-cloud-secret-manager
部分新版本的google-cloud-secret-manager已经放宽了protobuf的版本限制,尝试更新该包:
pip install google-cloud-secret-manager --upgrade
更新后如果它的依赖要求不再限制protobuf<4.0.0,就能和现有版本兼容。
问题原因
这个错误是依赖版本不兼容导致的:google-cloud-secret-manager(Airflow GCS提供者间接依赖它)要求protobuf版本低于4.0.0,但当前系统中安装的是4.21.9,两者冲突。升级googleapis-common-protos无法解决问题,因为这个包和protobuf是独立的依赖,不会调整protobuf的版本。
内容的提问来源于stack exchange,提问作者Ahmet Buğra BUĞA
相关产品推荐
相关产品推荐

