由于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