pybind11: operabilidad perfecta entre C++ 11 y Python
Ejemplo de herramientas de configuración • Ejemplo de compilación de Scikit • Ejemplo de CMake
pybind11 es una biblioteca liviana de solo encabezados que expone tipos de C++ en Python y viceversa, principalmente para crear enlaces de Python de código C++ existente. Sus objetivos y sintaxis son similares a los de la excelente biblioteca Boost.Python de David Abrahams: minimizar el código repetitivo en módulos de extensión tradicionales infiriendo información de tipo mediante introspección en tiempo de compilación.
El principal problema con Boost.Python (y la razón para crear un proyecto similar) es Boost. Boost es un conjunto enormemente grande y complejo de bibliotecas de utilidades que funciona con casi todos los compiladores de C++ que existen. Esta compatibilidad tiene su costo: se necesitan trucos arcanos de plantillas y soluciones alternativas para admitir los compiladores más antiguos y con más errores. Ahora que los compiladores compatibles con C++ 11 están ampliamente disponibles, esta maquinaria pesada se ha convertido en una dependencia excesivamente grande e innecesaria.
Piense en esta biblioteca como una pequeña versión autónoma de Boost.Python sin todo lo que no es relevante para la generación de enlaces. Sin comentarios, los archivos de encabezado principales solo requieren ~4K líneas de código y dependen de Python (3.8+ o PyPy) y la biblioteca estándar C++. Esta implementación compacta fue posible gracias a algunas características del lenguaje C++ 11 (específicamente: tuplas, funciones lambda y plantillas variadas). Desde su creación, esta biblioteca ha crecido más allá de Boost.Python en muchos sentidos, lo que ha llevado a un código vinculante mucho más simple en muchas situaciones comunes.
La documentación de referencia y tutorial se proporciona en pybind11.readthedocs.io. Una versión PDF del manual está disponible aquí. Y el código fuente siempre está disponible en github.com/pybind/pybind11.
pybind11 puede asignar las siguientes características principales de C++ a Python:
std::shared_ptr
Además de la funcionalidad principal, pybind11 proporciona algunas ventajas adicionales:
constexpr
), lo que genera archivos binarios más pequeños.Este proyecto fue creado por Wenzel Jakob. Jonas Adler, Lori A. Burns, Sylvain Corlay, Eric Cousineau, Aaron Gokaslan, Ralf Grosse-Kunstleve, Trent Houliston, Axel Huebl, @hulucc, Yannick Jadoul, Sergey Lyskov, Johan contribuyeron con importantes características y/o mejoras al código. Mabille, Tomasz Miąsko, Dean Moldovan, Ben Pritchard, Jason Rhinelander, Boris Schäling, Pim Schellart, Henry Schreiner, Ivan Smirnov, Boris Staletic y Patrick Stewart.
Agradecemos a Google por su generosa contribución financiera a la infraestructura de integración continua utilizada por este proyecto.
Consulte la guía de contribución para obtener información sobre cómo crear y contribuir a pybind11.
pybind11 se proporciona bajo una licencia estilo BSD que se puede encontrar en el archivo LICENCIA. Al usar, distribuir o contribuir a este proyecto, acepta los términos y condiciones de esta licencia.