python/c++接口庫比較(SWIG,boost.python, pycxx, py++, sip, Weave, Pyrex )


《python/c++接口庫比較(SWIG,boost.python, pycxx, py++, sip, Weave, Pyrex )》http://blog.csdn.net/lainegates/article/details/19565823

目前有很多開源的Python/c++ 綁定工具,搜了好多岾子,這里稍微總結下。

SWIG

  • 支持 Python 2 and 3
  • 配置正確的話,可以全自動完成封裝(*.i文件需要自己寫)
  • 當不是全自動的時候,它大多會重復你的.h文件並給出提示
  • 除了Python外,還支持其他語言(Java, Ruby, Lua, 等)
  • 輸出一個本地文件(這個文件會被編譯成.pyd)和一個封裝(這個封裝是python腳本,調用對應生成的.pyd)
  • 綁定(Bindings)的性能不是太好,不支持內部類(inner classes)的封裝
  • 不支持屬性(通過getter/setters訪問values)
  • 文檔很全,很容易學習
  • google使用了
  • C++支持不太好

Boost::Python

  • 支持 Python 2, 3和C++的綁定
  • 對於新手來說,學習它的語法有一定難度。但是這些語法很直觀
  • 大量使用了 C++ templates (可能是好事,也可能是壞事),會很明顯地提高編譯時間
  • 隨boost庫一起發布,且boost庫有用,但很大
  • 剛開始編譯使用boost.python封裝好的C++代碼時,出現的各種錯誤
  • 一些語法不易學習,像函數返回值時的規則
  • 非常可靠、穩定、經過充分測試的庫(boost庫里的部件都具有這特性)
  • 不支持屬性
  • 支持文檔寫得比較差,有些功能文檔里甚至都沒有寫。
  • 編譯后的pyd文件有些大,這不利於在手機或者嵌入平台使用
  • 配合py++使用,幾乎可以全自動封裝項目

Py++

  • 支持 Python 2, 3 和C++的綁定
  • 它調用boost.python自動完成項目綁定,相當於boost.python的高級工具

PyCxx

  • 支持 Python 2, 3 和C++的綁定
  • 輕量級的封裝庫,用的人挺多
  • 只支持C++
  • 目前沒有自動綁定工具

Python C api(Python 的幫助文檔里有)

  • 性能高
  • 靈活
  • 適合嵌入式
  • C++支持差
  • 復雜

ctypes(Python自帶的庫)

  • 靈活
  • 對c的代碼幾乎無縫調用
  • 使用起來比較繁瑣
  • 只支持c語言

SIP

  • 支持 Python 2, 3 和C++的綁定
  • 在PyQt中使用過,其他地方很少見它

Weave

  • 性能高
  • 很少見

Pyrex

  • 很少見
  • 目前還沒有成熟的項目
  • 性能較高
  • 接近於Python語法

參考:http://stackoverflow.com/questions/1492755/python-c-binding-library-comparison

http://web.archive.org/web/20090604182721/http://www.suttoncourtenay.org.uk/duncan/accu/integratingpython.html

https://wiki.python.org/moin/IntegratingPythonWithOtherLanguages

 

《Python擴展方法及工具比較》http://www.cdadata.com/4224

使用工具進行擴展:
雖然擴展過程並不復雜,但也可以使用許多已知的工具簡化擴展過程。
(1) SWIG
由David Beazley創建,是一個自動的擴展構造工具。它讀入注釋的C/C++頭文件,為python、tcl、perl等多種腳本語言產生wrap代碼。SWIG可以包裝大量C++特性到Python的擴展模塊中。詳情可參考http://www.swig.org。
評價:swig簡單,可以支持多種腳本文件,但支持的c++特性不完備。

(2) SIP
由Phil Thompson創建,是一個C++模塊構造器,專門為C++的類創造wrapper。它曾經被用於創建PyQt和PyKDE擴展模塊,因此比較出名。詳情可參考http://www.riverbankcomputing.co.uk/sip/。
評價:支持C++特征很齊全,但比較復雜。

(3) bgen
該工具被包含在標准Python發布包中的模塊構建工具集里,由Jack Jansen維護。它用於產生在Macintosh版本可用的Python擴展模塊。

(4) pyfort
由Paul dubois創建,用來產生Fortran語言生成的擴展模塊。詳見http://pyfortran.sourceforge.net。

(5) cxx
也由Paul Dubois創建,是一個庫,為Python的C++擴展提供了友好的API。Cxx允許將許多python對象(如list和tuple)使用到STL的運算中。庫也提供了C++異常處理到python異常處理的轉化。詳見http://cxx.sourceforge.net。

(6) WrapPy
由Greg Couch創建,通過讀入C++頭文件來產生擴展模塊。詳見http://www.cgl.ucsf.edu/home/gregc/wrappy/index.html。

(7) Boost Python Library
由David Abrahams創建。該庫提供了更多與眾不同的C++ wrap到python擴展中,而只需要對要擴展的C++類寫很少的附加信息。詳見http://www.boost.org/libs/python/doc。
評價:Boost為C++提供了許多實用的庫,如Regex(正則表達式庫)、Graph(圖組件和算法)、concept check(檢查泛型編程中的concept)、Thread(可移植的C++多線程庫)、Python(把C++類和函數映射到Python之中)、Pool(內存池管理)等等。
Boost總體來說是實用價值很高,質量很高的庫。並且強調對跨平台的支持。但是Boost中也有很多是實驗性質的東西,在實際的開發中實用需要謹慎。
boost.python支持的c++特性較多,但是比較復雜。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM