我正在寫python程序,需要處理很多小而複雜的protobuf編碼消息。我試圖使用協議緩衝區的Python實現,它是用純Python編寫的,但其性能非常糟糕。使用swig綁定google協議緩衝區
所以我正在尋找一個解決方案,顯然some folks got to work - 使用protoc生成C++文件,然後使用swig用python包裝它們。問題是我無法到達一個可用的Python模塊。
當運行痛飲與
-includeall
,以 確保所有生成的 消息類所使用的谷歌基礎/實用工具類也得到包裹 - 痛飲失敗,抱怨丟失的系統包括文件(例如「字符串」) 。我無法用-I標誌或複製整個包含目錄來解決此問題。環境是Ubuntu 10.04,protobuf 2.2.0,swig 1.3.40,gcc 4.4.3。沒有這個標誌,我能夠產生一個Python模塊爲我 郵件類,但該模塊是沒用的:生成的Python的 消息類缺少由消息 基類提供的所有函數 - 特別是除了其中之一以外的反序列化方法。剩下的 (MergePartialFromCodedStream)的一種方法將不會運行,因爲它需要輸入 CodedInputStream類型的流(它是protobuf基礎結構的 的一部分,因此沒有用swig包裝 )。
我想知道是否有人有一個工作的例子,讓swig在protobuf-C++之上工作?
或者 - 是否有其他解決方案的示例,如同一頁面中提到的Python擴展?雖然這似乎是我的動態模式的高維護解決方案...
如果這些工作都不起作用,我正在考慮將python放棄以支持Groovy - 假設協議緩衝區的Java實現會更有效。對此有何評論?
Muchas Gracias!
謝謝約翰... 我終於通過使用Greplin工具(https://github.com/Greplin)得到了這個整理 - 強烈推薦! –