繁体   English   中英

C ++ API作为Python扩展模块

[英]C++ API as an Python Extension Module

由于API的固有可调用性,是否可以始终使用给定的源代码将用C或C ++编写的API制成一个库,然后从Python对其进行调用?

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

它比运行setup.py脚本要复杂得多,但是有一些包装C / C ++库的工具,因此您可以从Python使用它们。 一些受欢迎的是:

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

某些项目使用其他工具来生成Python绑定,并且它们很可能会被重用(需要花费大量的精力)。 PyQt4使用SIP ,PySide(另一种Qt绑定)具有shiboken ,而GTK等。 Gobject自省

并不是那么简单,但是基本上您可以使用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脚本轻松查询以生成绑定。 就是说,我可能没有想到很多细节,这可能会阻止这种方法的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM