热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python版Protobuf安装和使用教程

本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。

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)
如此大功告成了
推荐阅读
  • Windows环境下Python和pip命令无法识别的解决方案
    本文详细介绍了在Windows操作系统中遇到Python和pip命令无法识别的问题时的解决方法,帮助初学者快速配置Python开发环境。 ... [详细]
  • 整理于2020年10月下旬:总结过去,展望未来Itistoughtodayandtomorrowwillbetougher.butthedayaftertomorrowisbeau ... [详细]
  • 尽管Medium是一个优秀的发布平台,但在其之外拥有自己的博客仍然非常重要。这不仅提供了另一个与读者互动的渠道,还能确保您的内容安全。本文将介绍如何使用Bash脚本将Medium文章迁移到个人博客。 ... [详细]
  • 本文介绍了读写锁(RWMutex)的基本概念、实现原理及其在Go语言中的应用。读写锁允许多个读操作并发执行,但在写操作时确保互斥,从而提高并发性能。 ... [详细]
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • 本文讲述了一位80后的普通男性程序员,尽管没有高学历,但通过不断的努力和学习,在IT行业中逐渐找到了自己的位置。从最初的仓库管理员到现在的多技能开发者,他的职业生涯充满了挑战与机遇。 ... [详细]
  • 微信小程序中的ActionSheet和Picker组件详解
    本文详细介绍了微信小程序中ActionSheet和Picker组件的使用方法及示例代码,帮助开发者更好地理解和应用这些组件。 ... [详细]
  • 本文详细介绍了 Android 开发中常用的单位 dip(设备独立像素)、px(像素)、pt(点)和 sp(可缩放像素),并解释了它们在不同屏幕密度下的应用。 ... [详细]
  • 本文为初学者提供了一条清晰的学习路线,帮助他们逐步成长为优秀的Web开发人员。通过十个关键步骤,涵盖从基础到高级的各个方面,确保每位学习者都能找到适合自己的学习方向。 ... [详细]
  • h5调用本地摄像头和麦克风一
    h5调用本地摄像头和麦克风一,Go语言社区,Golang程序员人脉社 ... [详细]
  • UVa 1579 - 套娃问题
    本题主要涉及动态规划(DP)的应用,通过计算将前i个套娃合并成多个套娃组所需的最小操作次数来解决问题。具体来说,f(i) 表示前i个套娃合并成多个套娃组所需的操作次数,其计算公式为 f(i) = min(f(j) + dp(j+1, i))。 ... [详细]
  • 深入解析:存储技术的演变与发展
    本文探讨了从单机文件系统到分布式文件系统的存储技术发展过程,详细解释了各种存储模型及其特点。 ... [详细]
  • 本文探讨了如何通过状态压缩动态规划(状压DP)和矩阵快速幂技术来解决公交线路问题。特别地,我们利用连续K个站点的状态来进行状态压缩,并通过矩阵快速幂加速计算过程。 ... [详细]
  • 本文介绍了使用PHP Imagick扩展进行图片合成的两种方法,包括`compositeimages`和`combineimages`函数的详细用法及其参数说明。 ... [详细]
  • 解决Oracle GC Agent安全配置失败的问题
    本文详细记录了在配置Oracle Grid Control (GC) Agent时遇到的安全配置失败问题及其解决方法。尽管多次尝试重启和重新配置,问题仍未完全解决,但在某些情况下,通过特定步骤可以部分恢复功能。 ... [详细]
author-avatar
谁明浪子心
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有