`

mac下安装protocol buffer并用python解析

 
阅读更多

由于业务需要,项目中需要用到google的一种高效的可扩展的结构化数据存储方式protocol buffer(以下简称pb)。很多人可能对这个新东西不熟悉,大家都知道xml,json,确很少听过pb,下面我就粗劣总结一下pb在mac环境下的搭建以及用python解析的简单过程。

首先下载最新pb源码,放到相应的文件夹解压。

安装步骤如下(强调一下:如安装不成功,就以管理员身份安装即在每句命令前加上sudo):

这句如果解压完了就不需要了tar -xzf protobuf-2.1.0.tar.gz

 cd protobuf-2.1.0
 ./configure --prefix=$INSTALL_DIR(要安装的目录,以管理员身份安装可以省去,系统会默认一个位置)
 make
 make check
 make install
如果一切顺利的话,可以用下面语句检测:
protoc --version    (会输出版本号,如果提升command not found,那就那烦你重新安装,记着以管理员身份运行)
这些做完之后,我们可以简单的了解一下pb了:

首先我们需要编写一个 proto 文件,定义我们程序中需要处理的结构化数据,在 protobuf 的术语中,结构化数据被称为 Message。proto 文件非常类似 java 或者 C 语言的数据定义。代码清单 1 显示了例子应用中的 proto 文件内容。 清单 1. proto 文件

 package lm;
 message Person
 {
    required int32     id = 1;  // ID
    required string    str = 2;  // str
    optional int32     opt = 3;  //optional field
 }

一个比较好的习惯是认真对待 proto 文件的文件名。比如将命名规则定于如下:

packageName.MessageName.proto
在上例中,package 名字叫做 lm,定义了一个消息 helloworld,该消息有三个成员,类型为 int32 的 id,另一个为类型为 string 的成员 str。opt 是一个可选的成员,即消息中可以不包含该成员。

接下来我们编译这个proto文件试试,看能不能成功:

 

假设您的 proto 文件存放在 $SRC_DIR 下面,您也想把生成的文件放在同一个目录下,则可以使用如下命令:

 protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/a.proto
如果你地址写对了,并且文件名不以数字等非法字符开头的话,你应该正在乐着了。你应该在你的
$DST_DIR目录下看到多了一个文件,a_pb2.py,打开看看,其中有一部分你应该没有问题吧,
至少你上面写的pb中的那几个属性能找到吧,还有class,不说了,注意,下面才是关键
	编译完之后怎么用了,要是不会用,那上面不就白干了吗?
我们自定义一个text.py文件,代码如下:

import a_pb2

 

p = a_pb2.Person()

#print p.__doc__

 

p.name = "gtts" # name应该很熟悉了吧

print p.name

运行这段代码,悲剧的是报错了:No module named google.protobuf
怎么解决了,好像我们缺少东西,解决方法如下:

执行 python setup.py install进行安装,一般可能需要如“setuptools-0.6c11-py2.6.egg”的文件,将其拷贝到上述python目录,

【如果可以连外网,则可省略上一步】确认安装好的命令为sudo python ./setup.py test (别忘了sudo,不然你成功不了的)

如果配置成功的话,提示如下:

---------------------------------------------------

............省略很多字...........

 

Ran 193 tests in 0.520s

OK

----------------------------------------------------

好了,庆贺吧!


 

分享到:
评论

相关推荐

    protocol buffer

    Protocol Buffer(简称protobuf)是Google开发的一种数据序列化协议,它是跨平台、语言无关的,用于结构化数据的高效序列化方法。protobuf提供了一种方式将数据结构定义为.proto文件,然后可以使用protobuf编译器...

    01 Protocol Buffer技术详解(语言规范).doc

    1. 语言中立:Protocol Buffer 可以在不同的语言和平台之间进行数据交换,例如 Java、C++、Python 等。 2. 平台中立:Protocol Buffer 可以在不同的平台之间进行数据交换,例如 Linux、Windows、Android 等。 3. 可...

    Protocol Buffer

    2. **编译器**:`protoc`是Protocol Buffer提供的编译器,它可以将.proto文件编译成不同编程语言(如C++、Java、Python等)的源代码,生成的类库提供了序列化和反序列化的接口。 3. **序列化与反序列化**:Protocol...

    Protocol Buffer编译工具包

    为了使用Protocol Buffer编译工具包,你需要先安装对应版本的protoc,然后编写.proto文件定义数据结构,最后通过命令行调用protoc生成所需的源代码。一旦完成这一步,你就可以在项目中导入生成的类,利用PB提供的API...

    protocolbuffer

    Protocol Buffer允许接收端在不知道所有字段的情况下解析数据,只需处理它理解的字段即可。 三、Protocol Buffer的优点 1. **效率**:Protocol Buffer的序列化/反序列化速度远超XML或JSON,且生成的文件体积小,...

    Protocol Buffer sublime text 3插件

    然后通过快捷键`Ctrl+Shift+P`(Windows/Linux)或`Cmd+Shift+P`(Mac)打开命令面板,输入`Package Control: Install Package`,搜索并选择"Protocol Buffer Syntax"进行安装。 3. **插件功能**:安装完成后,...

    Protocol_Buffer官网文档中文版

    - **Protocol Buffer**是一种用于数据序列化的高效工具,支持多种编程语言(如Java、C++、Python等),能够实现数据的有效存储和传输。 #### 二、概念与工作原理 1. **概念介绍** - **Protocol Buffer**:一种...

    cocos2d-x protocol buffer 直接可以用的工程文件。

    这些库文件允许Cocos2d-x应用解析和生成Protocol Buffer定义的二进制数据格式。 "头文件"指的是Protocol Buffer的接口声明,开发者可以在C++代码中包含这些头文件来使用Protocol Buffer的功能。头文件包含了...

    Protocol Buffer 3.0 C++

    4. **跨平台和跨语言兼容性**: Protocol Buffer 3.0 改进了跨平台和跨语言的兼容性,不仅支持C++,还支持Java、Python等多种编程语言。这意味着定义的数据结构可以在不同语言的系统之间无缝共享。 5. **性能优化**:...

    ProtocolBuffer

    为了减小通信开销和提高同步效率,使用Protocol Buffer的优势就显现出来了:它的数据压缩性好,传输速度快,且解析效率高,这些都是移动互联网环境下非常重要的特性。 Protocol Buffer的工作原理是,开发者首先定义...

    google Protocol Buffer2.5.0.jar

    Protocol Buffer 2.5.0 jar包

    Protocol Buffer java版本

    4. **兼容性**:Protocol Buffer设计时考虑了向前兼容和向后兼容,这意味着即使在更新.proto文件添加新字段后,旧的序列化数据也能被新的代码正确解析。 5. **效率**:相比于XML或JSON,Protocol Buffer的数据格式...

    Python调用序列化数据工具Protocol Buffers——protobuf

    **Python调用序列化数据工具Protocol Buffers(protobuf)详解** Protocol Buffers是Google开发的一种高效的数据序列化协议,它允许开发者将结构化的数据串行化,可用于数据存储、通信协议等方面。Python作为一门...

    Protocol_Buffer中文翻译

    2. **处理速度**:Protocol_Buffer的数据解析和序列化速度远超XML。 3. **灵活性**:Protocol_Buffer支持动态添加字段而无需改变现有应用的结构,这在XML中很难做到。 #### 一点历史 Protocol_Buffer最初由Google...

    Protocol Buffer技术深入理解(C++实例)

    Protocol Buffer技术是Google开发的一种数据序列化协议,用于高效地编码和解码结构化数据。在C++中,Protocol Buffer提供了强大的工具`protoc`,用于将`.proto`文件转换为对应编程语言(如C++)的源代码,使得开发者...

    数据交换格式-protocol buffer

    它提供了强大的数据描述语言,开发者可以在.proto文件中定义数据结构,然后 Protocol Buffer 编译器会根据这些定义生成对应语言(如C++、Java、Python等)的源代码,便于在代码中使用。这些数据结构不仅可以在本地...

    Protocol Buffer配置及实例

    ### Protocol Buffer 配置及实例详解 #### 一、Protocol Buffers 概述 Protocol Buffers 被定义为一种数据描述语言(Data Description Language,DDL),它在 Google 内部得到了广泛的应用,主要用于结构化数据的...

    protocol buffer 3.0.0

    Protocol Buffer(简称protobuf)是Google开发的一种数据序列化协议,它是Google的一种高效、灵活且跨平台的数据交换格式。Protocol Buffers的设计目标是为了提供一种简单、快速、可扩展的方式来存储和传输结构化...

Global site tag (gtag.js) - Google Analytics