由於API的內在可調用特性,是否可以使用C或C++編寫的API始終作爲源代碼編譯爲庫,並且因此可以從Python中調用?作爲Python擴展模塊的C++ API
換句話說,給定一個C/C++ API,你可以在源代碼上使用distutils運行setup.py腳本,並有效地使用Python程序中的C/C++ API?
由於API的內在可調用特性,是否可以使用C或C++編寫的API始終作爲源代碼編譯爲庫,並且因此可以從Python中調用?作爲Python擴展模塊的C++ API
換句話說,給定一個C/C++ API,你可以在源代碼上使用distutils運行setup.py腳本,並有效地使用Python程序中的C/C++ API?
這比運行setup.py腳本涉及的多一點,但有些工具可以打包C/C++庫,以便您可以在Python中使用它們。一些流行的是:
某些項目使用其他工具來生成Python綁定,他們可能會重複使用(通過不同的努力)。 PyQt4使用SIP,PySide(另一個Qt結合)具有shiboken和GTK等人。有Gobject introspection。
對於那些決定爲此使用Cython的人,我實際上寫了一篇關於它的小文章,內容涵蓋了從編寫Cython源文件到編寫它們的所有細節,編寫setup.py - 基本上是包裝C/C++庫所需的一切用Python的Cython:http://martinsosic.com/development/2016/02/08/wrapping-c-library-as-python-module.html – Martinsos
這不是那麼簡單,但基本上你可以使用SWIG來做到這一點,它將生成綁定你的python和C/C++代碼的必要包裝。 http://www.swig.org/Doc1.3/Python.html
沒有將C++ API綁定到Python的內在或自動機制。它必須手動完成。我見過的最好的工具是Boost Python。
當然,考慮到C++面向對象編程和Python OO代碼之間的清晰映射,創建一個解析C++頭文件併產生綁定聲明的腳本應該不會太困難。 GCC-XML將爲您提供經過分析的頭文件的xml表示形式,可以通過python腳本輕鬆查詢該腳本來生成綁定。也就是說,可能有很多我沒有預料到的細節可能會妨礙這種方法的發揮。
那麼,源代碼將被手動修改使用distutils。我將嘗試這些建議並返回以選擇答案。 – Stephen