Este ejemplo muestra cómo escribir una función sencilla en C++, compilarla como un módulo para Python usando pybind11 y luego usarla directamente desde Python.
- Archivo C++:
sum.cpp - Script Python para probar:
test_sum.py - Comando para compilar el módulo
Este código define una función en C++ que suma dos enteros y la expone a Python mediante pybind11.
#include <pybind11/pybind11.h>
// Función en C++ que suma dos números
int suma(int a, int b) {
return a + b;
}
// Definición del módulo pybind11 con nombre "sum"
PYBIND11_MODULE(sum, m) {
m.def("suma", &suma, "Suma dos números enteros");
}Se necesita Python 3, un compilador de C++ y pybind11 instalado en el mismo entorno de Python que se usará para ejecutar el ejemplo. En Debian/Ubuntu, instale también los headers de desarrollo de Python:
sudo apt install build-essential python3-dev
python3 -m pip install pybind11Si usa Conda, puede instalar pybind11 en el entorno activo con
conda install -c conda-forge pybind11.
Desde esta carpeta, compile el código. python3-config y python3 deben
pertenecer al mismo entorno:
c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3 -m pybind11 --includes) sum.cpp -o sum$(python3-config --extension-suffix)-O3: optimización máxima.-Wall: mostrar advertencias.-shared -fPIC: crear una librería compartida.$(python3 -m pybind11 --includes): incluye las rutas necesarias para pybind11 y Python.sum.cpp: archivo fuente.-o sum...: nombre del módulo generado con el sufijo adecuado para Python (.so).
Al finalizar, se tendrá un archivo .so para importar en Python. El sufijo
codifica la versión y plataforma; recompílalo si cambias de versión de Python.
El archivo test_sum.py ya contiene la prueba para usar la función suma.
import sum
resultado = sum.suma(5, 7)
print("El resultado de la suma es:", resultado)
# Salida esperada: El resultado de la suma es: 12En la terminal, estando en el mismo directorio que el módulo compilado y el script:
python3 test_sum.pyObservará la salida:
El resultado de la suma es: 12
- Se definió una función en C++ para sumar dos números.
- Se usó pybind11 para crear un módulo Python que envuelve esa función.
- Se compiló el módulo con las opciones adecuadas.
- Se llamó a la función directamente desde Python, obteniendo el resultado esperado.
Este flujo es muy útil para acelerar partes críticas de código usando C++ y aprovechar la simplicidad y flexibilidad de Python para el resto del desarrollo.