为什么我在使用Google协议缓冲区时会看到“cannotimportnamedescriptor_pb2”错误?

2024-05-23 19:07:52 发布

您现在位置:Python中文网/ 问答频道 /正文

使用protobuf类生成的Python代码时,会出现以下错误:

cannot import name descriptor_pb2

等效的C++生成代码工作正常,因此我们的实际原始定义没有问题。

当我尝试导入我们的类时会发生此错误,如下所示:

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-我们使用的是最新版本,所以我认为我们没有丢失任何文件。

有人知道解决办法是什么吗?


Tags: topath代码namepyimport定义错误
3条回答

我相信你必须自己产生descriptor_pb2.py

protoc descriptor.proto --python_out=gen/

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

在那之后,下面的工作很好:

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

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

请确保按照自述文件中的指示安装protobuf运行时库。不能简单地直接使用包外的源代码,因为作为安装过程的一部分,protoc(protobuf编译器)需要生成descriptor_pb2.py。

在我的例子中,由于protobuf没有正确安装,所以找不到描述符pb2。 在protobuf的python子目录中,确保运行

python setup.py build
python setup.py test
python setup.py install (as root)

相关问题 更多 >