设为首页 收藏本站
查看: 491|回复: 0

[经验分享] mac下安装protocol buffer并用python解析

[复制链接]

尚未签到

发表于 2015-12-3 09:08:50 | 显示全部楼层 |阅读模式
  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
  ----------------------------------------------------
  好了,庆贺吧!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-146629-1-1.html 上篇帖子: leetcode 【 Sort List 】 python 实现 下篇帖子: python+NLTK+科学计算包安装(numpy/scipy/matplotlib等)+win64位[转]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表