Dataflow自定义Python模板执行报错:依赖版本不兼容求助
Dataflow自定义Python模板依赖冲突报错解决
核心问题分析
报错包含两个关键冲突:
TypeError: Descriptors cannot not be created directly:根源是protobuf版本过高(当前4.21.5),而apache-beam 2.36.0要求protobuf版本在>=3.12.2,<4范围内。- 多个google-cloud客户端库(vision、videointelligence等)与google-api-core 2.10.0不兼容:这些旧版库仅支持google-api-core
>=1.14.0,<2.0.0dev版本。
解决方案
1. 编写兼容的requirements.txt
直接锁定冲突依赖的兼容版本,示例如下:
apache-beam[gcp]==2.36.0 # 匹配beam要求的protobuf版本,同时满足protoc>=3.19.0的要求 protobuf==3.20.3 # 降到google-cloud旧版库支持的1.x分支 google-api-core==1.31.5 # 可选:升级google-cloud库到支持1.x api-core的最新版,或保留旧版但确保兼容 google-cloud-vision==2.11.0 google-cloud-videointelligence==2.5.0 google-cloud-spanner==3.19.1 google-cloud-recommendations-ai==0.8.0 google-cloud-language==2.10.0 google-cloud-datastore==2.15.0 google-cloud-core==1.7.2 google-cloud-bigtable==2.19.0
2. 彻底清理环境重新构建
- 删除本地虚拟环境(如果使用),重新创建并激活:
rm -rf venv python -m venv venv source venv/bin/activate # Windows系统执行 venv\Scripts\activate - 安装依赖:
pip install -r requirements.txt - 重新构建Dataflow模板,确保指定
--requirements_file参数指向更新后的文件。
3. 验证依赖兼容性
安装完成后执行pip freeze,检查输出中:
- protobuf版本为3.x(如3.20.3)
- google-api-core版本为1.x(如1.31.5)
- 所有google-cloud库版本与上述两个依赖无冲突提示
为什么修改requirements.txt无效?
大概率是本地环境存在依赖缓存,或构建模板时未正确加载新的依赖配置。彻底删除旧虚拟环境、重新安装依赖可以避免缓存干扰,确保依赖完全按照指定版本安装。
内容的提问来源于stack exchange,提问作者turqo92
相关产品推荐
相关产品推荐

