2011-12-02 83 views
1

由於API的內在可調用特性,是否可以使用C或C++編寫的API始終作爲源代碼編譯爲庫,並且因此可以從Python中調用?作爲Python擴展模塊的C++ API

換句話說,給定一個C/C++ API,你可以在源代碼上使用distutils運行setup.py腳本,並有效地使用Python程序中的C/C++ API?

+0

那麼,源代碼將被手動修改使用distutils。我將嘗試這些建議並返回以選擇答案。 – Stephen

回答

1

這比運行setup.py腳本涉及的多一點,但有些工具可以打包C/C++庫,以便您可以在Python中使用它們。一些流行的是:

  • Cython - 你編寫Python風格的代碼,但你可以cimport C庫和調用它們的函數。然後將Cython代碼翻譯爲C並編譯。有一個名爲cython-codegen的不受支持的工具可以自動編寫簡單的包裝。
  • boost.python - 用於封裝C++庫。
  • SWIG
  • ctypes - 加載編譯的庫並直接從Python調用它們。 ctypesgen試圖根據頭文件自動編寫一個包裝。

某些項目使用其他工具來生成Python綁定,他們可能會重複使用(通過不同的努力)。 PyQt4使用SIP,PySide(另一個Qt結合)具有shiboken和GTK等人。有Gobject introspection

+1

對於那些決定爲此使用Cython的人,我實際上寫了一篇關於它的小文章,內容涵蓋了從編寫Cython源文件到編寫它們的所有細節,編寫setup.py - 基本上是包裝C/C++庫所需的一切用Python的Cython:http://martinsosic.com/development/2016/02/08/wrapping-c-library-as-python-module.html – Martinsos

0

沒有將C++ API綁定到Python的內在或自動機制。它必須手動完成。我見過的最好的工具是Boost Python。

當然,考慮到C++面向對象編程和Python OO代碼之間的清晰映射,創建一個解析C++頭文件併產生綁定聲明的腳本應該不會太困難。 GCC-XML將爲您提供經過分析的頭文件的xml表示形式,可以通過python腳本輕鬆查詢該腳本來生成綁定。也就是說,可能有很多我沒有預料到的細節可能會妨礙這種方法的發揮。