我目前正在研究一個項目,我不得不用Python包裝C++類以便能夠編寫腳本程序。所以我的具體經驗也涉及到在我們的程序中嵌入Python解釋器。向Python公開一個C++ API
我試過的替代品:
Boost.Python的
我喜歡用Boost.Python的產生的更簡潔的API,但事實上,它會要求用戶安裝做一個額外的依賴我們切換到SWIG。
痛飲
呷主要用於我們的優勢是,它不要求最終用戶安裝使用的最終方案。
你以前做過什麼,以及你曾經使用過什麼?
我目前正在研究一個項目,我不得不用Python包裝C++類以便能夠編寫腳本程序。所以我的具體經驗也涉及到在我們的程序中嵌入Python解釋器。向Python公開一個C++ API
我試過的替代品:
Boost.Python的
我喜歡用Boost.Python的產生的更簡潔的API,但事實上,它會要求用戶安裝做一個額外的依賴我們切換到SWIG。
痛飲
呷主要用於我們的優勢是,它不要求最終用戶安裝使用的最終方案。
你以前做過什麼,以及你曾經使用過什麼?
我用兩個(同一項目):加速是較好的綜合與STL,特別是C++異常。另外,它的內存管理機制(試圖連接C++內存管理和Python GC)比SWIG更靈活。但是,SWIG具有多更好的文檔,沒有外部的依賴關係,如果你包裹在夜風庫爲Python你比那裏得到一個Java/Perl的/ Ruby包裝器,以及中途更多。
我不認爲有明確的選擇:對於較小的項目,我會再次使用Boost.Python,對於大型長壽命項目,SWIG的額外投資是值得的。
我建議SIP。由於以下原因,SIP比SWIG更好:
對於給定的一組文件,swig會生成比SIP更多的重複(開銷)代碼。 SIP通過使用可靜態或動態鏈接的庫文件來管理生成較少的重複(開銷)代碼。換句話說,SIP具有更好的可擴展性。 SIP的
執行時間比痛飲的要少得多。請參閱Python Wrapper Tools: A Performance Study。不幸的是,鏈接似乎中斷我有一個可以根據要求共享的個人副本。
Boost :: Python的一大優點是,它允許在ipython shell中完成tab:您可以直接導入由Boost公開的C++類,或者將其子類化,並且從此它的行爲就像純Python類。
的缺點:它需要很長時間來安裝和使用,所有的製表完成省時永遠不會攤銷;-(
升壓所以我更喜歡痛飲:不花俏,但工作可靠經過一個簡短的介紹性例子,
我有興趣看到它,你可以發佈它的地方,並鏈接到它?否則,我們可以安排你直接發送給我 – 2008-11-13 16:56:03
wayback機器有一個副本:http: //web.archive.org/web/20070703071726/http://people.web.psi.ch/geus/talks/europython2004_geus.pdf – 2008-11-14 00:00:18