C ++ API作为Python扩展模块

时间:2011-12-02 00:19:24

标签: c++ python api

由于API的内在可调用特性,用C或C ++编写的API是否总是被创建为一个库,给定源代码,因此可以从Python中调用?

换句话说,给定一个C / C ++ API,你可以在源代码上使用distutils运行一个setup.py脚本,并有效地使用python程序中的C / C ++ API吗?

3 个答案:

答案 0 :(得分:1)

它比运行setup.py脚本更复杂,但是有一些工具可以包装C / C ++库,因此您可以在Python中使用它们。一些流行的是:

  • Cython - 你编写Python风格的代码,但你可以插入C库并调用它们的函数。然后将Cython代码转换为C并进行编译。有一个名为cython-codegen的不受支持的工具可以自动编写一个简单的包装器。
  • boost.python - 用于包装C ++库。
  • SWIG
  • ctypes - 加载已编译的库并直接从Python调用它们。 ctypesgen尝试根据头文件自动编写包装器。

某些项目使用其他工具来生成Python绑定,并且可能会重复使用它们(需要付出不同的努力)。 PyQt4使用SIP,PySide(另一个Qt绑定)使用shiboken,而GTK等。有Gobject introspection

答案 1 :(得分:0)

这并不是那么简单,但基本上你可以使用SWIG来做到这一点,它将生成必要的包装器来绑定你的python和C / C ++代码。 http://www.swig.org/Doc1.3/Python.html

答案 2 :(得分:0)

没有将C ++ API绑定到Python的内在或自动机制。必须手动完成。我见过的最好的工具是Boost Python。

当然,考虑到C ++面向对象编程和Python OO代码之间的清晰映射,创建一个解析C ++头文件并生成绑定声明的脚本应该不会太困难。 GCC-XML将为您提供已解析标头的xml表示形式,可以通过python脚本轻松查询以生成绑定。也就是说,我可能没有预料到可能阻止这种方法发挥作用的大量细节。