Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式,巴拉巴拉。。(嗯,简介都是摘抄,protobuf的好处不了解的同学可以去深入了解)。这篇主要记录下python版的portobuf 安装步骤。
1. 根据自己的系统下载相应的protobuf。
2. 命令行配置,这里下载了 protobuf-3.5.1, 以次为例:
进入 protobuf-3.5.1
cd protobuf-3.5.1
设置编译目录,指定一个目录 /Users/ZZ/Desktop/Python/Tools
./configure --prefix=/Users/ZZ/Desktop/Python/Tools
安装
make
make install
配置环境变量
sudo vi .bash_profile
添加配置文件
export PROTOBUF=/Users/ZZ/Python/Tools
export PATH=$PROTOBUF/bin:$PATH
测试是否安装成功
protoc --version
如果出现如下提示则代表安装成功
libprotoc 3.5.1
在Pycharm中新建一个package 叫做protobufExample
在protobufExample下面新建一个proto文件,取名person。
syntax = "proto3";
package protobufExample;
message person {
int32 id = 1;
string name = 2;
}
message all_person {
repeated person Per = 1;
}
使用protoc编译生成proto文件如图:
$ protoc --python_out=. person.proto
就会生成 person.pb2.py 文件
main.py中编写序列化与反序列化的测试代码:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from protobufExample import person_pb2
# 为 all_person 填充数据
pers = person_pb2.all_person()
p1 = pers.Per.add()
p1.id = 1
p1.name = 'xieyanke'
p2 = pers.Per.add()
p2.id = 2
p2.name = 'pythoner'
# 对数据进行序列化
data = pers.SerializeToString()
# 对已经序列化的数据进行反序列化
target = person_pb2.all_person()
target.ParseFromString(data)
print(target.Per[1].name) # 打印第一个 person name 的值进行反序列化验证
print(target.Per[1].id)
如此大功告成了