python - 为什么我在使用 Google Protocol Buffers 时会看到 "cannot import name descriptor_pb2"错误?

标签 python protocol-buffers

当使用我们的 protobuf 类生成的 Python 代码时,我们得到这个错误:

cannot import name descriptor_pb2

等效的 C++ 生成的代码工作得很好,所以看起来我们的实际原型(prototype)定义没有问题。

当我尝试导入我们的类时出现此错误,如下所示:

import sys
sys.path.append('..\path\to\generated')
sys.path.append('..\contrib\protobuf\python')

from foobar_pb2 import FooBar

附加系统路径是否正确?

我在 protobuf\python\google\protobuf 目录中检查了 descriptor_pb2.py 但只找到了 descriptor.py - 我们使用最新版本,所以我假设我们没有丢失任何文件。

有谁知道解决办法是什么?

最佳答案

我相信你必须自己用 protoc 生成 descriptor_pb2.py:

protoc descriptor.proto --python_out=gen/

gen/ 是一个包含生成的 python 类的文件夹。

之后,下面的工作正常:

sys.path.append('../gen')
from descriptor_pb2 import FileDescriptorSet

../gen/descriptor_pb2.py 必须存在。

关于python - 为什么我在使用 Google Protocol Buffers 时会看到 "cannot import name descriptor_pb2"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1828379/

相关文章:

python - 如何从 session 查询中获取倒数第二条记录

python - 如何将一个索引与同一列表中的前一个索引进行比较?

python - 抛出名称错误 : name 'pathlib' is not defined with Python 3. 4

c++ - 按名称创建 Protobuf 消息对象

Java:来自字符串的 protobuf

python - 在 Python 中使用 OpenCv2 编写多个图像

protocol-buffers - "Failed to parse input"来自 Google protocol buffers `` 的 protoc 命令 --decode_raw ``

python - 如何将多维 h5py 数据集复制到平面一维 Python 列表而不制作任何中间副本?

python - 为什么protobuf/python对MessageToDict函数中的字节字段进行base64编码

python - 在我的工作目录中的目录中创建一个文件