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 ---------------------------------------------------- 好了,慶賀吧! |