There exist several tools which make it possible to couple Python and compiled libraries:
Pros | Cons | |
---|---|---|
Cython | powerful | complexity |
requires writing interface files | ||
complicates build process | ||
pybind11 | header-only | requires C++11 |
lightweight | ||
great for C++11 | ||
C++ can call Python | ||
SWIG | supports many languages | requires writing interface files |
complicates build process | ||
Boost | powerful | huge |
F2PY | direct link to Fortran | intrusive to source code |
no need to go via C | restricts some features | |
CFFI | general | for C++, pybind11 is more direct |
simple | ||
non-intrusive | ||
requires C interface | ||
generates Python bindings | ||
any language (via C) |
In this tutorial we will take a closer look at two of these tools:
pybind11: it is a modern, simple, and lightweight way to interface Python and C++.
CFFI: because it is modern, simple, non-intrusive (does not require modifying neither the Python nor the compiled code), and very general since almost any language can talk to a C interface.
Many tools exist with different scope, expressiveness, and complexity.