当前位置: 首页 > 知识库问答 >
问题:

Python 3中的协议缓冲区-未实现错误

令狐弘益
2023-03-14

我试图在Python 3项目中使用Google协议缓冲区。然而,生成的python文件不想与google合作。protobuf库。尝试使用protobuf对象会导致NotImplementedError。

我的设置:

  • Python 3.4.1

使用这些库时出现问题:

    https://pypi.python.org/pypi/protobuf-py3/2.5.1
  • python3-原型(https://pypi.python.org/pypi/python3-protobuf/2.5.0)

例子:

from pb_test import test_pb2
pb_object = test_pb2.TestMsg()
pb_object.Clear()  # results in NotImplementedError

使用两个不同的库时会出现同样的问题,这强烈暗示test_pb2.py文件无效。“未实现”方法位于Message类中,应该由元类覆盖。似乎根本没有应用元类。

测试。原型文件:

message TestMsg {
  required int32 id = 1;
}

文件使用以下命令编译:

eipifi@debvm:~/pb_test$ protoc --python_out=. test.proto

如有任何提示,将不胜感激。

共有1个答案

章宏恺
2023-03-14

解决了。为了使*_pb2.py文件与Python 3中的原型库很好地配合使用,需要通过以下方式更改文件:

原件:

class TestMsg(_message.Message):
__metaclass__ = _reflection.GeneratedProtocolMessageType
DESCRIPTOR = _TESTMSG

固定的:

class TestMsg(_message.Message, metaclass=_reflection.GeneratedProtocolMessageType):
DESCRIPTOR = _TESTMSG
 类似资料:
  • 试图使用Ionic 4中的协议缓冲区进行编码 我已经下载了协议并用它来生成一堆_pb.js文件,每个. proto文件一个。很好。 首先关注原型示例。这是示例代码: 我做了一些更改以匹配我的文件。更改proto文件的名称。但是我的proto文件中没有包名称。所以我只是使用了消息名称。首先这是我的. proto文件的开头: 下面是我修改后的代码: 这似乎不起作用。我的控制台显示: 我相信我已经成功地

  • 我试图安装Caffe库,但我有一个编译问题,由于一个错误的原型版本安装在我的系统。 我在论坛上遵循了许多提议的方法,我认为在这篇帖子中讨论了最类似的问题。 在caffe.pb.h中控件是: 但是在我的系统标头(/usr/include/google/cript buf/stubs/Common. h)中: 命令protoc--version从终端返回libprotoc 3.2.0。 所以我安装了3

  • 我试着按照你的指示去做https://github.com/golang/protobuf和https://github.com/google/protobuf/releases安装协议缓冲区。在我将bin路径从下载文件夹添加到之后,我试图运行,但它显示 有没有办法判断我是否正确安装了protobuf? 谢谢

  • 我有一个简单的客户端和服务器设置。客户端希望在服务器中使用ZeroMQ执行通信方法。我将使用REQ和REP套接字,因为它们适合这个用例。然而,我对protobuf的定义有疑问。我认为这两个选项可用于实现目标: 其中“control”包含要远程执行的方法的名称。另一种选择可以是: 最好的方法是什么?或者至少使用一种方法而不是另一种方法的权衡是什么?

  • 据我所知,协议缓冲区主要用于控制服务器和客户端代码的项目。我的一般问题是——协议缓冲区能否用于将二进制消息序列化/反序列化到使用现有协议的服务器?所以,我的问题: > 如果协议缓冲区不支持本机微调现有协议的序列化/反序列化方式,那么可以通过扩展添加该功能吗?是否可以以某种方式添加序列化/反序列化方法可以识别的关键字?也许这可以通过扩展或修改protobuf csharp port或protobuf

  • 问题内容: 我正在使用gSoap将旧式C 系统重构为SOA。我们遇到了一些性能问题(非常大的XML),因此我的领导要我看一下协议缓冲区。我做到了,它看起来非常酷(我们需要C 和Java支持)。但是协议缓冲区是仅用于序列化的解决方案,现在我需要将其发送到Java前端。从C ++和Java角度来看,我应该使用什么来通过HTTP(只是内部网络)发送那些序列化的内容? PS。另一个人试图加速我们的gSoa