2012-12-20 37 views
3

我有一個C++庫,我需要能夠與Python接口。我讀this question瞭解我需要適應的選擇。C/C++庫與Python的接口

我看到了SWIG和Cython,想和SWIG一起去,主要是因爲我的python編程經驗非常少。但是,我意識到使用Swig我必須爲每個類編寫一個接口(.i擴展)。現在,我的C++項目非常龐大,我覺得需要花費很多時間才能獲得包裝(或者我錯了)。

所以現在,因爲我的應用程序很大,我需要做出選擇。在引用的線程中,我遇到了Boost Python。現在我不能再決定,並希望能夠告訴我一個人的優點和缺點的人的意見。請注意,我的偏好易於使用,並且可以多快完成。我願意爲此犧牲系統性能。如果有人能夠爲我提供一個SWIG實現的項目或Boost Python實現的項目鏈接(一個完整的模塊而不是示例教程會更好!),我將非常感謝。

+0

這應該是您安裝Boost並驗證一切正常工作所需的一切:http://www.boost.org/doc/libs/1_39_0/libs/python/doc/building.html – paulsm4

+0

此外,此Wiki頁面是充滿了一些非常好的提示,提升了教程的缺失http://wiki.python.org/moin/boost.python?action=show&redirect=BoostPython –

回答

4

Boost :: python提供了幾乎無包裝的接口C++和Python。它還允許您編寫自定義轉換器和其他整潔的東西,使Python接口更加美觀。接口是純粹的C++,但它們依賴於模板和巧妙的設計模式,使它看起來非常漂亮,並且是聲明性的。編譯器直接檢查連接器代碼的好處。

使用Swig,您可以在Swig自己的DSL中編寫接口聲明,這需要幾天的時間才能完成。另外,它總是插入一個包裝層,所以它可能會慢一點。然而,它具有自動轉換許多東西而不需要額外聲明的優點。它生成的包裝很難調試。

恕我直言,boost :: python是更好的選擇,因爲你直接用CPython的本地C接口工作。我使用Swig進行Java和C++交互,因爲JNI是一個熊,Python的C接口本身實際上相當有用。

如果你已經有一堆Swig包裝,我會保留這些,因爲你必須重做所有這些工作。然而,開始一個新項目,或者如果你需要最大的性能,一路提升:: python!

+0

謝謝。 !所以我深入到boost :: python來獲取原型運行。感謝鏈接到文檔以及。 – rockstar

+0

嘗試pybind11,它允許多種類型的自動轉換(並且不使用整個boost庫) –