翻译自《Python Bindings: Calling C or C++ From Python》

ctypes

CFFI

  1. $ pip install cffi

调用函数

PyBind11

  1. $ pip install pybind11

Cython

  1. $ pip install cython

Cython是一个相对复杂的工具,在为C/C++创建Python绑定时,它可以为您提供更深层次的控制。虽然这里没有深入介绍它,但它提供了一种Python式的方法,用于编写手动控制GIL的代码,这可以显著加速某些类型的问题。
然而,这种类似Python的语言并不完全是Python语言,因此,当你要快速了解C和Python的哪些部分适合于哪些地方时,会有一个轻微的学习曲线。

其他

PyBindGen

Boost.Python

Boost.Python 有一个类似于PyBind11的接口,您在上面看到了这个接口。这不是巧合,因为PyBind11就是基于这个库的!Boost.Python 是用完整的C++编写的,并且在大多数平台上支持大多数(如果不是全部的话)C++版本。相比之下,PyBind11将自己限制为现代C++。

SIP

SIP是为PyQt项目开发的用于生成Python绑定的工具集。wxPython项目也使用它来生成它们的绑定。它有一个代码生成工具和一个额外的Python模块,为生成的代码提供支持函数。

Cppyy

cppyy 通过利用 Cling C++解释器和LLVM提供全自动、动态的Python-C++绑定。它通过C++ 17同时支持PyPy(原生的)、CPython和C++ 语言标准。

Shiboken

Shiboken 是一个用于生成Python绑定的工具,它是为与Qt项目相关联的PySide项目开发的。虽然它是作为该项目的工具而设计的,但文档表明它既不是Qt专用的,也不是PySide专用的,可以用于其他项目。

SWIG

SWIG 与这里列出的其他工具不同。它是一个通用工具,用于为许多其他语言(不仅仅是Python)创建到C/C++程序的绑定。这种为不同语言生成绑定的能力在某些项目中非常有用。当然,就复杂性而言,这是有代价的。