我的第一个Protobuf3 demo python

demo环境 ubuntu 16.04  ,  python3.5

下载安装

从 https://github.com/protocolbuffers/protobuf/releases

下载 protobuf-python-3.7.0.tar.gz 并解压 编译 并 安装

a@ubuntu:~/Desktop/myproto/protobuf-3.7.0$ ./configure

a@ubuntu:~/Desktop/myproto/protobuf-3.7.0$ make

a@ubuntu:~/Desktop/myproto/protobuf-3.7.0$ sudo make install

a@ubuntu:/usr/local/lib$ protoc --version
protoc: error while loading shared libraries: libprotobuf.so.18: cannot open shared object file: No such file or directory

报错了
a@ubuntu:/usr/local/lib$ export LD_LIBRARY_PATH=/usr/local/lib/  
a@ubuntu:/usr/local/lib$ protoc --version
libprotoc 3.7.0
a@ubuntu:/usr/local/lib$ echo "export LD_LIBRARY_PATH=/usr/local/lib/" >> ~/.bashrc
a@ubuntu:/usr/local/lib$ tail ~/.bashrc
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
export PYTHONPATH=$PYTHONPATH:/home/a/Desktop/mytf/
export LD_LIBRARY_PATH=/usr/local/lib/
 

安装完毕好了

demo 开始

1. 新建一个d3.proto  d2.proto 文件

@ubuntu:~/Desktop/myproto$ cat d3.proto 
syntax = "proto3";

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 result_per_page = 3;
}

a@ubuntu:~/Desktop/myproto$ cat d2.proto 
syntax = "proto2";

package tutorial;

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phones = 4;
}

message AddressBook {
  repeated Person people = 1;
}

a@ubuntu:~/Desktop/myproto$ protoc -I=. --python_out=. ./d2.proto
a@ubuntu:~/Desktop/myproto$ ls
d2_pb2.py  d2.proto  d3.proto
a@ubuntu:~/Desktop/myproto$ protoc -I=. --python_out=. ./d3.proto
a@ubuntu:~/Desktop/myproto$ ls
d2_pb2.py  d2.proto  d3_pb2.py  d3.proto
a@ubuntu:~/Desktop/myproto$ 

 

生成了d2_pb2.py   d3_pb2.py 。

 

python代码使用

a@ubuntu:~/Desktop/myproto$ python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> from d3_pb2 import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'd3_pb2'
>>> sys.path.append('/home/a/Desktop/myproto')
>>> from d3_pb2 import *
>>> sr = SearchRequest()
>>> sr.query = "my query"
>>> sr.page_number = 34

>>> sr.result_per_page
0
>>> sr.result_per_page = 40
>>> sr.IsInitialized()
True
>>> sr.__str__()
'query: "my query"\npage_number: 34\nresult_per_page: 40\n'
>>> sr.Clear()
>>> sr.__str__()
''
>>> 

>>> pack = sr.SerializeToString()
>>> pack
b'\n\x08my query'
>>> help(sr.SerializeToString)

>>> help(sr.ParseFromString)

>>> a = sr.ParseFromString(pack)
>>> a
10
>>> pack
b'\n\x08my query'
>>> sr2  = SearchRequest()
>>> sr2

>>> sr
query: "my query"

>>> sr2.ParseFromString(pack)
10
>>> sr2
query: "my query"

>>> 
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值