Python 3中的协议缓冲区

我正在尝试在Python 3项目中使用Google Protocol Buffers。 然而,生成的python文件不想与google.protobuf库合作。 尝试使用protobuf对象会导致NotImplementedError。

我的设置:

  • Python 3.4.1
  • protoc 2.5.0
  • 使用这些库时出现问题:

  • protobuf-py3(https://pypi.python.org/pypi/protobuf-py3/2.5.1)
  • python3-protobuf(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类中,该类应该被元类覆盖。 看来这个元类完全没有应用。

    test.proto文件:

    message TestMsg {
      required int32 id = 1;
    }
    

    该文件使用以下命令进行编译:

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

    任何提示将不胜感激。


    解决了。 为了使* _pb2.py文件与Python 3中的protobuf库一起运行良好,需要按以下方式更改这些文件:

    原版的:

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

    固定:

    class TestMsg(_message.Message, metaclass=_reflection.GeneratedProtocolMessageType):
    DESCRIPTOR = _TESTMSG
    
    链接地址: http://www.djcxy.com/p/48337.html

    上一篇: Protocol Buffers in Python 3

    下一篇: creating a python dictionary like object from protocol buffers for use in pandas