获得快速的Python protobuf支持时遇到问题

时间:2018-06-19 22:23:55

标签: python python-3.x protocol-buffers

我看到应该支持为C ++生成的protobuf阅读器创建python包装器。

来自http://yz.mit.edu/wp/fast-native-c-protocol-buffers-from-python/  我找到了一种通过设置环境变量来打开支持的简单方法:

PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION = cpp

如果我这样做,则会出现以下错误:

    import pyFileLib.db_proc_geo_pb2
  File "C:\sandbox\PrortoBuf\lib\pyFileLib\db_proc_geo_pb2.py", line 6, in <module>
    from google.protobuf import descriptor as _descriptor
  File "c:\python\winpython-64bit-3.6.3.0qt5\python-3.6.3.amd64\lib\site-packages\google\protobuf\descriptor.py", line 46, in <module>
    from google.protobuf.pyext import _message
ImportError: cannot import name '_message'

我看到了一种扩展protoc生成器以本地生成fastpython输出的方法: https://github.com/Cue/fast-python-pb

git clone https://github.com/Cue/fast-python-pb.git

cd fast-python-pb

python setup.py install

尝试使用--fastpython_out运行协议时出现以下错误:

ModuleNotFoundError: No module named 'plugin_pb2'

--fastpython_out: protoc-gen-fastpython: Plugin failed with status code 1.

这似乎与以下内容有关: https://groups.google.com/forum/#!topic/protobuf/5Ywz8gwn9Kk

  

python安装协议缓冲区不会生成   google.protobuf.compiler.plugin_pb2 python文件,而   google.protobuf.descriptor_pb2由以下人员显式生成   protobuf / python / setup.py

我该如何进行这种显式安装...或者使python中的protobuf性能可接受?

1 个答案:

答案 0 :(得分:3)

我在https://developers.google.com/protocol-buffers/docs/reference/python-generated的末尾发现了这个小宝石

  

还有一个通过Python的Python消息的C ++实现   扩展以获得更好的性能。实现类型由   环境变量PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION(有效   值:“ cpp”和“ python”)。默认值为当前“ python”   但在将来的版本中将更改为“ cpp”。

     

请注意,在安装之前需要设置环境变量   protobuf库,以便构建和安装python   延期。 C ++实现也需要CPython平台。看到   python / INSTALL.txt了解详细的安装说明。

WinPython 3.6.3发行版已经安装了protobuf,但显然在安装过程中未设置此标志

使用以下命令解决此问题:

set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp

python -mpip install protobuf --upgrade