最後一個問題,我可以真正把價值的答案:)。
我已經調查了f2py,boost.python,swig,cython和pyrex以供我的工作(光學測量技術博士學位)。我廣泛使用swig,boost.python一些和pyrex和cython很多。我也用ctypes。這是我的故障:
免責聲明:這是我的個人經驗。我沒有參與任何這些項目。
swig: 與C++不兼容。它應該,但是在鏈接步驟中名稱損壞的問題對於我來說是一個令人頭疼的問題,因爲它在Mac OS X上是非常令人頭痛的。如果你有C代碼並且希望它與python接口,那麼這是一個很好的解決方案。我爲我的需要包裝了GTS,並且需要編寫基本可以連接的C共享庫。我不會推薦它。
ctypes的: 我寫了使用ctypes的一個libdc1394(IEEE相機庫)的包裝,這是一個非常straigtforward經驗。你可以在https://launchpad.net/pydc1394找到代碼。將頭文件轉換爲Python代碼是很多工作,但是一切工作都可靠。如果你想連接外部庫,這是一個好方法。 Ctypes也是Python的stdlib,所以每個人都可以立即使用你的代碼。這也是一個很好的方式來快速使用python中的新庫。我可以推薦它連接到外部庫。
Boost.Python:非常愉快。如果你已經有了你自己想要在python中使用的C++代碼,那就去做吧。以這種方式將C++類結構轉換爲python類結構非常容易。我推薦它,如果你有python需要的C++代碼。
耐熱玻璃/用Cython:使用用Cython,不耐熱玻璃。期。 Cython更先進,更愉快使用。如今,我所做的一切都是用我用SWIG或Ctypes做的cython。如果你的Python代碼運行速度太慢,這也是最好的方法。這個過程非常奇妙:你將你的python模塊轉換成cython模塊,構建它們並保持分析和優化,就像仍然是python一樣(不需要改變工具)。然後,您可以應用盡可能多(或儘可能少)的C代碼與Python代碼混合。這要比使用C重寫應用程序的整個部分要快得多。你只重寫內部循環。
計時:ctypes具有最高的通話開銷(〜700ns),其次是boost.python(322ns),然後直接通過swig(290ns)。 Cython具有最低的通話開銷(124ns)和花費時間的最佳反饋(cProfile支持!)。數字來自我的方框,調用一個簡單的函數,它從交互式shell中返回一個整數;因此,模塊導入開銷不是定時的,只有函數調用開銷。因此,通過分析和使用cython來快速獲得python代碼是最簡單和最有成效的。
摘要:對於你的問題,使用Cython;)。我希望這個概要對一些人有用。我會很樂意回答剩下的問題。
編輯:我忘記提及:進行數值的目的(即,連接到NumPy的)使用用Cython;他們支持它(因爲他們基本上爲此開發了cython)。所以這應該是你的決定的另一個+1。
非常有價值的概述,謝謝。你有暴露高度模板化C++的經驗嗎?我知道boost方法是模板元編程,但他們是否真的支持暴露模板元編程庫?此外,在過去18個月中對該清單所做的任何更改? – daspostloch 2011-04-20 09:06:08