CPython has a myriad of ways for integrating with C/C++:
Create bindings for other languages without needing a compilation step (pure-Python solutions)
-
cffi: Provides a way to call compiled C from Python without any compilation step (also compatible -- and fast -- with PyPy).
-
ctypes: Builtin to Python it's a way to call C code from Python without any compilation step (also compatible with PyPy but slower than cffi).
Wrap C/C++ code and compile it to create bindings for existing C/C++ libraries.
-
Cython: can compile Python code and mixed Cython/C/C++ code and can be used to create bindings for existing C/C++ libraries (the most "Pythonic" of the listed solutions).
-
SWIG: Provides a way to wrap C/C++ code and compile it creating bindings (not only for Python, but also a many other languages).
-
PyCXX: Provides a way to wrap C/C++ code and compile it creating bindings for Python.
-
Boost.Python: Provides a way to wrap C/C++ code and compile it creating bindings for Python.
-
SIP: used by PyQt to wrap Qt.
-
shiboken: Used by PySide to wrap Qt.