標籤:
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 ---------------------------------------------------- 好了,慶賀吧! |
mac下安裝protocol buffer並用python解析