基于cython的protobuf编译器
pyrobuf的Python项目详细描述
{ Br.Br/>>BR/><介绍> BR/> BR/> PythBuF是谷歌Python原型BuBF库的替代物。
> BR> >它使用谷歌的Python Br/>原Bug库,使用其C++后端,比谷歌快20~40X,生成快的Cython代码,其速度比谷歌的Python
原BoF库快2~4倍。纯python
实现。
更重要的是,pyrobuf是自包含的,易于安装。
如果你想为pyrobuf做贡献,你可能还想安装pytest.
pyrobuf*不需要protoc.
pyrobuf似乎在osx上工作,Linux和Windows(对于后者来说,让cython正常工作是最棘手的一点,特别是如果您仍在使用
2.7的话)。
Pyrobuf处理
AppNexus和其他贡献者的用例,但还没有完全取代
Protoc将生成的内容。
分叉并克隆存储库,然后运行:
$python setup.py develop
它将生成特定于平台的"pyrobuf"列表,然后编译
"pyrobuf"列表和"pyrobuf util"模块。
$py.test
或使用"test"命令(如果还不可用,则安装pytest):
$python setup.py test
任一方法都将自动生成
"tests/proto"中的所有protobuf消息规范,并将"pythonpath"指向之前生成的消息运行
测试。
如果需要,重新运行"develop"或"test"命令将自动重新构建
"pyrobuf list"和"pyrobuf util"模块。
对您的某个proto文件不起作用,请在"tests/proto"中添加一个最小的
proto文件,该文件在提交拉取请求之前中断。
包括中断测试的拉取请求是金级的!
改进测试就在眼前。
只是点它!
```
$pip install pyrobuf
```
应该能做到!
检查,您可能需要确保以下命令不会引发异常:
$python-c"import pyrobuf_list"
>如果确实引发异常,请尝试:
`````
$pip install pyrobuf-v-v-v--upgrade--force--no cache
"pip install pyrobuf"获得pyrobuf cli工具…:
$pyrobuf--help
用法:pyrobuf[-h][--out dir out dir][--build dir build dir][--install]
source
a cython-based protobuf compiler
源文件名.proto或包含proto文件的目录
C编译器生成目录[默认:生成]
--安装扩展名[默认:false]
--将要安装的包的名称打包到
如果不想处理setuptools入口点的特殊性,也可以做:
$python-m pyrobuf--help
\proto;使用
在python中,您可以通过运行以下命令导入新的消息类:
```
from test_message_proto import test
```
可以创建新消息:
```
test=test()
```
>;>;test.list戋fieldx.append(12)
>;>;test.test戋ref.field2=3.14
`````
>并访问这些字段:
````
>;test.string戋field
"您好!"
```
至少填写完任何"必需"字段后,我们就可以序列化为一个字节数组:
```
>;>;test.serializeToString()
byteArray(b'\x10\x05\x1a\x06您好!\ x0c2\t\x19\x1f\x85\xebq\xb8\x1e\t@p\x02')
````
我们还可以将protobuf消息反序列化到消息实例:
````
>;>;test.parsefromstring('\x10\x05\x1a\x06您好!\ x0c2\t\x19\x1f\x85\xebq\xb8\x1e\t@p\x02')
25
````
请注意,"parsefromstring"方法返回消耗的字节数。
pyrobuf还允许我们序列化和反序列化json和native
python字典:
````
>;>test.serializetojson()
{"field":5,"req_field":2,"list_fieldx":[12],"string_field":"您好!","test戋ref":{"field2":3.14}'
>;>;test.parseFromJSON('{"field":5,"req戋field":2,"list戋fieldx":[12],"string戋field":"您好!","测试参考":{"field2":3.14}')
>;>test.serializetodict()
{字段:5,
"列表字段x":[12],
"请求字段":2,
"字符串字段":"您好!",
"测试参考:{'field2':3.14}
>;>;测试.parsefromdict({'field':5,'list_fieldx':[12],'req_field':2,'string_field':'hello!',"test-ref":{field2':3.14})
```
最后,"pyrobuf-util"模块包含对整数进行编码和解码的函数。
```
>;>;将pyrobuf-util
>;>;将pyrobuf-util.导入到变量(2**16-1)
bytearray(b'\xff\xff\x03')
>;pyrobuf util.from_varent(b'\xff\xff\x03',offset=0)
(65535L,3)
>;>;pyrobuf util.to_signed_varent(-2**16)
bytearray(b'\xff\xff\x07')
>;>;pyrobuf util.from_signed_varent(b'\xff\x07',offset=0)
(-65536L,3)
```
希望将它们都构建到自己的单独包中,但希望一个包含所有消息的名称空间,您可以指定一个包名:
```
pyrobuf/path/to/proto/specs--install--package=My_Messages
```
>然后您可以从"My_Messages"PakCage导入消息类:
```
>;>;从My Messages导入MyMessage1,MyMessage2
```
setup.py
```
pyrobuf添加一个新的setup关键字"pyrobuf_modules",可用于指定
单个protobuf文件或包含protobuf文件的文件夹。例如,"setup.py"
文件可能如下:
``
安装程序需要=['pyrobuf'],
pyrobuf-modules="proto"
)
`````
消息。
安装此示例包后,可以如下使用:
```
>;
当谷歌的库用于消息序列化时,当使用谷歌库的C++后端时,对于消息BR/>反序列化的速度是2.3x:
‘BR/> & Python Test/PrimyTest.Py<BR/>谷歌花了1.649168秒来序列化
Pyrobuf花了0.825525秒序列化了
谷歌在不使用C++后端的情况下,Pyrobuf花了0.466113秒的时间才把1.113041秒的时间写在了<,pyrobuf的序列化速度约为25x
,反序列化速度约为55x:
```
谷歌序列化时间为20.215662秒
pyrobuf序列化时间为0.819555秒
谷歌反序列化时间为24.990137秒
pyrobuf反序列化时间为0.455732秒反序列化
```
我们正在努力使您尽可能容易地帮助改进pyrobuf。
在大多数情况下,pyrobuf应该是google
protobuf库的拖放替换。不过,有一些不同。首先,pyrobuf当前没有实现"listfields"、"whichoneof"、"hassextension"、"clearextension"和"bytesize"方法。
其次,pyrobuf只是假设用于给定消息的模式在发送端和接收端是相同的,因此更改
字段的一端不更改另一端可能会导致错误;添加或删除
字段不会打断任何内容。
> BR> >它使用谷歌的Python Br/>原Bug库,使用其C++后端,比谷歌快20~40X,生成快的Cython代码,其速度比谷歌的Python
原BoF库快2~4倍。纯python
实现。
更重要的是,pyrobuf是自包含的,易于安装。
如果你想为pyrobuf做贡献,你可能还想安装pytest.
pyrobuf*不需要protoc.
pyrobuf似乎在osx上工作,Linux和Windows(对于后者来说,让cython正常工作是最棘手的一点,特别是如果您仍在使用
2.7的话)。
Pyrobuf处理
AppNexus和其他贡献者的用例,但还没有完全取代
Protoc将生成的内容。
分叉并克隆存储库,然后运行:
$python setup.py develop
它将生成特定于平台的"pyrobuf"列表,然后编译
"pyrobuf"列表和"pyrobuf util"模块。
$py.test
或使用"test"命令(如果还不可用,则安装pytest):
$python setup.py test
任一方法都将自动生成
"tests/proto"中的所有protobuf消息规范,并将"pythonpath"指向之前生成的消息运行
测试。
如果需要,重新运行"develop"或"test"命令将自动重新构建
"pyrobuf list"和"pyrobuf util"模块。
对您的某个proto文件不起作用,请在"tests/proto"中添加一个最小的
proto文件,该文件在提交拉取请求之前中断。
包括中断测试的拉取请求是金级的!
改进测试就在眼前。
只是点它!
```
$pip install pyrobuf
```
应该能做到!
检查,您可能需要确保以下命令不会引发异常:
$python-c"import pyrobuf_list"
>如果确实引发异常,请尝试:
`````
$pip install pyrobuf-v-v-v--upgrade--force--no cache
"pip install pyrobuf"获得pyrobuf cli工具…:
$pyrobuf--help
用法:pyrobuf[-h][--out dir out dir][--build dir build dir][--install]
source
a cython-based protobuf compiler
源文件名.proto或包含proto文件的目录
C编译器生成目录[默认:生成]
--安装扩展名[默认:false]
--将要安装的包的名称打包到
如果不想处理setuptools入口点的特殊性,也可以做:
$python-m pyrobuf--help
\proto;使用
在python中,您可以通过运行以下命令导入新的消息类:
```
from test_message_proto import test
```
可以创建新消息:
```
test=test()
```
>;>;test.list戋fieldx.append(12)
>;>;test.test戋ref.field2=3.14
`````
>并访问这些字段:
````
>;test.string戋field
"您好!"
```
至少填写完任何"必需"字段后,我们就可以序列化为一个字节数组:
```
>;>;test.serializeToString()
byteArray(b'\x10\x05\x1a\x06您好!\ x0c2\t\x19\x1f\x85\xebq\xb8\x1e\t@p\x02')
````
我们还可以将protobuf消息反序列化到消息实例:
````
>;>;test.parsefromstring('\x10\x05\x1a\x06您好!\ x0c2\t\x19\x1f\x85\xebq\xb8\x1e\t@p\x02')
25
````
请注意,"parsefromstring"方法返回消耗的字节数。
pyrobuf还允许我们序列化和反序列化json和native
python字典:
````
>;>test.serializetojson()
{"field":5,"req_field":2,"list_fieldx":[12],"string_field":"您好!","test戋ref":{"field2":3.14}'
>;>;test.parseFromJSON('{"field":5,"req戋field":2,"list戋fieldx":[12],"string戋field":"您好!","测试参考":{"field2":3.14}')
>;>test.serializetodict()
{字段:5,
"列表字段x":[12],
"请求字段":2,
"字符串字段":"您好!",
"测试参考:{'field2':3.14}
>;>;测试.parsefromdict({'field':5,'list_fieldx':[12],'req_field':2,'string_field':'hello!',"test-ref":{field2':3.14})
```
最后,"pyrobuf-util"模块包含对整数进行编码和解码的函数。
```
>;>;将pyrobuf-util
>;>;将pyrobuf-util.导入到变量(2**16-1)
bytearray(b'\xff\xff\x03')
>;pyrobuf util.from_varent(b'\xff\xff\x03',offset=0)
(65535L,3)
>;>;pyrobuf util.to_signed_varent(-2**16)
bytearray(b'\xff\xff\x07')
>;>;pyrobuf util.from_signed_varent(b'\xff\x07',offset=0)
(-65536L,3)
```
希望将它们都构建到自己的单独包中,但希望一个包含所有消息的名称空间,您可以指定一个包名:
```
pyrobuf/path/to/proto/specs--install--package=My_Messages
```
>然后您可以从"My_Messages"PakCage导入消息类:
```
>;>;从My Messages导入MyMessage1,MyMessage2
```
setup.py
```
pyrobuf添加一个新的setup关键字"pyrobuf_modules",可用于指定
单个protobuf文件或包含protobuf文件的文件夹。例如,"setup.py"
文件可能如下:
``
安装程序需要=['pyrobuf'],
pyrobuf-modules="proto"
)
`````
消息。
安装此示例包后,可以如下使用:
```
>;
当谷歌的库用于消息序列化时,当使用谷歌库的C++后端时,对于消息BR/>反序列化的速度是2.3x:
‘BR/> & Python Test/PrimyTest.Py<BR/>谷歌花了1.649168秒来序列化
Pyrobuf花了0.825525秒序列化了
谷歌在不使用C++后端的情况下,Pyrobuf花了0.466113秒的时间才把1.113041秒的时间写在了<,pyrobuf的序列化速度约为25x
,反序列化速度约为55x:
```
谷歌序列化时间为20.215662秒
pyrobuf序列化时间为0.819555秒
谷歌反序列化时间为24.990137秒
pyrobuf反序列化时间为0.455732秒反序列化
```
我们正在努力使您尽可能容易地帮助改进pyrobuf。
在大多数情况下,pyrobuf应该是google
protobuf库的拖放替换。不过,有一些不同。首先,pyrobuf当前没有实现"listfields"、"whichoneof"、"hassextension"、"clearextension"和"bytesize"方法。
其次,pyrobuf只是假设用于给定消息的模式在发送端和接收端是相同的,因此更改
字段的一端不更改另一端可能会导致错误;添加或删除
字段不会打断任何内容。