mac下安裝protocol buffer並用python解析

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

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

  好了,慶賀吧!

相關文章
相關標籤/搜索