新版protoc生成的_pb2.py文件不完整致BigQuery上传失败求助
问题解答
1. 生成的_pb2.py文件是否不完整?
不是。新版本protoc生成的文件并非不完整,而是Protobuf的代码生成逻辑在新版本中做了优化,旧版本里的_DUPLICATE赋值和duplicate类属于内部冗余实现代码,新版本已经不再生成这类内容,这是正常的版本迭代变化。
2. 问题原因及解决方法
原因
BigQuery的旧版数据上传逻辑可能依赖了旧版本protoc生成的代码结构(比如_DUPLICATE标识、duplicate类),而Protobuf 3.20+版本开始优化了代码生成规则,移除了这些内部实现相关的冗余代码,导致BigQuery客户端无法适配新生成的_pb2.py文件结构,最终上传失败。
解决方法
- 降级protoc版本:安装3.19.x及以下的protoc版本(即之前能正常生成包含_DUPLICATE代码的版本),重新运行生成命令。确保执行protoc时使用的是降级后的程序路径。
- 升级BigQuery客户端库:将google-cloud-bigquery库升级到最新版本,新版客户端已适配Protobuf 3.20+的代码生成格式。执行命令:
pip install --upgrade google-cloud-bigquery - 临时手动补充代码:如果暂时无法调整版本,可以手动在生成的_pb2.py文件末尾添加以下代码(仅作临时 workaround,不推荐长期使用):
_DUPLICATE = None class duplicate(_message.Message): __slots__ = [] _DESCRIPTOR = _DUPLICATE
内容的提问来源于stack exchange,提问作者ChrisChros
相关产品推荐
相关产品推荐

