文档章节

python调用Google Protocol Buffer

彼得
 彼得
发布于 2013/10/18 15:27
字数 320
阅读 5550
收藏 1

下载地址:
http://code.google.com/p/protobuf/downloads/list

安装命令
tar -xzf protobuf-2.5.0.tar.gz 
 cd protobuf-2.5.0 
 ./configure --prefix=$INSTALL_DIR 

 make  

 make check

 make install 

然后进入python目录,

python setup.py install --prefix=$INSTALL_DIR


写proto文件
package lm;
message Person
{
        required int32  id = 1;
        required string str = 2;
        optional int32  opt = 3;
}
保存为 testp.testpb.proto

编译指令 
protoc -I=/home/workspace/testprob --python_out=/home/workspace/testprob /home/workspace/testprob/testp.testpb.proto

google
https://developers.google.com/protocol-buffers/docs/pythontutorial

报错
package directory 'google/protobuf/compiler' does not exist

解决 
https://groups.google.com/forum/?fromgroups=#!topic/protobuf/YeT5RW4qCxY
python ./setup.py build
sudo python ./setup.py install

报错
 File "/home/workspace/testprob/testp/testpb_pb2.py", line 6, in <module>
    from google.protobuf import reflection as _reflection
  File "build/bdist.linux-i686/egg/google/protobuf/reflection.py", line 68, in <module>
  File "build/bdist.linux-i686/egg/google/protobuf/internal/python_message.py"
  ImportError: cannot import name enum_type_wrapper

解决
http://code.google.com/p/protobuf/issues/detail?id=438
Log message
Fix  issue 438 : add missing 'enum_type_wrapper' to setup.py
是安装包的一个改进文件,copy下来, 重新安装

根据安装目录下的demo  自己改写了个简单的, 觉得它那个还是麻烦

write.py
import testpb_pb4
import sys

p = testpb_pb2.Person()

try:
  f = open(sys.argv[1], "rb")
  p.ParseFromString(f.read())
  f.close()
except IOError:
  print sys.argv[1] + ": File not found.  Creating a new file."


p.id = 32
p.str = "test"

f = open(sys.argv[1], "wb")
f.write(p.SerializeToString())
f.close()

print "write success"


编译指令 python write.py "test"

read.py 
import sys
import testpb_pb2

if len(sys.argv) != 2:
  print "Usage:", sys.argv[0], "ADDRESS_BOOK_FILE"
  sys.exit(-1)

p = testpb_pb2.Person()

f = open(sys.argv[1], "rb")
p.ParseFromString(f.read())
f.close()

print "p.str = ",  p.str
print "p.id=", p.id

编译指令 python read.py "test"

© 著作权归作者所有

共有 人打赏支持
下一篇: mysql 点点滴滴
彼得

彼得

粉丝 39
博文 122
码字总数 38726
作品 0
深圳
程序员
私信 提问
TensorFlow Serving 日志

Tensorflow Serving 机器学习技术支撑着许多 Google 产品的功能,比如:Google 应用中的语音识别,收件箱的智能回复,以及Google 照片搜索,等等。尽管软件行业几十年中积累起的无数经验促成...

斐波那契的数字
2018/01/08
0
0
远程通信协议:从 CORBA 到 gRPC

自从产业界发明机器联网的那一天就已经开始探索最优的远程通信机制。操作系统如 UNIX、Windows 和 Linux 等都有实现远程通信的内部协议,挑战在于如何向开发人员开放一个通信框架。 一、远程...

RiboseYim
2017/10/31
0
0
Riak的Python客户端介绍

原文转自:http://blog.nosqlfan.com/html/3061.html Riak提供Erlang 和基于 Protocol Buffer 这两种数据操作API,本文要介绍的就是一个Riak的使用Protocol Buffer实现的Python客户端。目前还...

小卒过河
2011/09/13
1K
0
Google Protocol Buffer 的各语言实现版本

Google Protocol Buffer 专门用来串行化和反串行化对象,但官方仅实现了C++、Python、Java三种语言。其他语言版本也相继由不同的作者来实现。虽然有一定缺陷,也足以在大部分的项目中使用了。...

啊和
2013/07/23
0
0
google protocal buff

简介 protobuf是google提供的一个开源序列化框架。主要应用于通信协议,数据存储中的结构化数据的序列化。它类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML...

hgfgoodcreate
2015/10/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark in action on Kubernetes - Playground搭建与架构浅析

前言 Spark是非常流行的大数据处理引擎,数据科学家们使用Spark以及相关生态的大数据套件完成了大量又丰富场景的数据分析与挖掘。Spark目前已经逐渐成为了业界在数据处理领域的行业标准。但是...

阿里云官方博客
7分钟前
0
0
小白大数据学习路线

学习大数据首先了解大数据技术得板块划分: 数据计算(离线计算):Hadoop、spark 数据计算(实时计算):storm、spartstreaming、flink 其他框架:zookeeper 数据采集:flume、Kafka 数据存...

董黎明
20分钟前
0
0
mariadb 内存占用优化

本文由云+社区发表 作者:工程师小熊 摘要:我们在使用mariadb的时候发现有时候不能启动起来,在使用过程中mariadb占用的内存很大,在这里学习下mariadb与内存相关的配置项,对mariadb进行调...

腾讯云加社区
今天
2
0
spring security 自定义登录认证

spring security 自定义认证登录 1.概要 1.1.简介 spring security是一种基于 Spring AOP 和 Servlet 过滤器的安全框架,以此来管理权限认证等。 1.2.spring security 自定义认证流程 1)认证...

EasyProgramming
今天
1
0
Win下Jenkins-2.138源码编译及填坑笔记

源码编译篇 1、 安装JDK1.8-181,操作系统添加JDK环境变量。Java -version验证一下。 注:Jenkins2.138版本,JDK必须jkd1.8.0-101以上,不支持Java9,Maven必须3.5.3以上。 2、 解压Maven3....

编程SHA
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部