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

http://blog.csdn.net/lainegates/article/details/19565823html

目前有不少開源的python/c++ 綁定工具,搜了好多岾子,這裏稍微總結下。python

SWIGc++

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

Boost::Pythonweb

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

Py++api

  • 支持 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語法

Cython 

  • 基於Pyrex,不少外部庫的擴展用它寫的

參考: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

相關文章
相關標籤/搜索