我看到应该支持为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性能可接受?
答案 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