mac下安装protocol buffer并用python解析java
因为业务须要,项目中须要用到google的一种高效的可扩展的结构化数据存储方式protocol buffer(如下简称pb)。不少人可能对这个新东西不熟悉,你们都知道xml,json,确不多听过pb,下面我就粗劣总结一下pb在mac环境下的搭建以及用python解析的简单过程。python
首先下载最新pb源码,放到相应的文件夹解压。json
安装步骤以下(强调一下:如安装不成功,就以管理员身份安装即在每句命令前加上sudo):性能
这句若是解压完了就不须要了tar -xzf protobuf-2.1.0.tar.gzui
cd protobuf-2.1.0 ./configure --prefix=$INSTALL_DIR(要安装的目录,以管理员身份安装能够省去,系统会默认一个位置) make make check make installgoogle
若是一切顺利的话,能够用下面语句检测:xml
protoc --version (会输出版本号,若是提高command not found,那就那烦你从新安装,记着以管理员身份运行)源码
这些作完以后,咱们能够简单的了解一下pb了:string
首先咱们须要编写一个 proto 文件,定义咱们程序中须要处理的结构化数据,在 protobuf 的术语中,结构化数据被称为 Message。proto 文件很是相似 java 或者 C 语言的数据定义。代码清单 1 显示了例子应用中的 proto 文件内容。 清单 1. proto 文件io
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 ---------------------------------------------------- 好了,庆贺吧! |