protofile.proto:具有此名称的文件已在池中



具有以下结构:

- project1
- project1.py
- protofile_pb2.py
- protofile_pb2_grpc.py
- project2
- project2.py
- protofile_pb2.py
- protofile_pb2_grpc.py

project1.py:

import protofile_pb2.py
...

project2.py:

import protofile_pb2
import project1
...

运行 project2.py 时,出现此错误:

TypeError: Couldn't build proto file into descriptor pool!
Invalid proto descriptor for file "protofile.proto":
protofile.proto: A file with this name is already in the pool.

根据这条评论,它对我有用:

pip uninstall protobuf
pip install --no-binary protobuf protobuf

您正在使用生成的protofile.proto的不同版本。确保重新生成 protobuf 文件,它应该可以正常工作。

我在Python中部署谷歌云函数时遇到了类似的问题。我的云功能在我的模块中使用不同版本的 .proto 文件(这又是一个私有模块,我想使用 requirements.txt 安装(。解决方案是使用纯python实现,而不是使用protobuf的二进制实现。要在云函数或云构建中解决此问题,您可以设置云函数环境变量以使用协议缓冲区的python实现。

在您的 gcloud 云函数部署命令中,使用以下选项:

<start of command> --set-env-vars=PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION='python' <your rest of the command>

或者如果您在任何其他环境中,只需执行此操作

export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION='python' 

这解决了我的问题。

For protobuf>=3.20.x

为 Python 安装协议缓冲区库

pip install protobuf
set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python

清理缓存并restart the kernel

选择

将 protobuf 软件包降级到 3.20.x 或更低

版本
pip install protobuf=3.11.3

搜索项目中sentencepiece_model.proto文件的任何重复出现项。确保文件只有一个副本。

相关内容

  • 没有找到相关文章

最新更新