Come eseguire il C e il C++ da uno script Python? Ebbene sì, si può eseguire il codice scritto in C oppure in C++ all’interno di uno script Python: in questo articolo scoprirai in più o meno cinque minuti come sia possibile eseguire questo processo!
Sembra incredibile ma sì, si può eseguire il linguaggio C e la sua variante evoluta, ovvero il C++, da uno script scritto in linguaggio Python. La domanda è ovviamente: come posso eseguire il C e il C++ da uno script Python?
È quello che affronteremo assieme in questo articolo, ma prima le presentazioni!
Mi chiamo Lorenzo Neri e sono un informatico. Ho avuto il piacere di creare questo blog nel 2020 per aiutare persone come te a padroneggiare l’arte del nuovo millennio: l’informatica. Questo blog è nient’altro che una raccolta delle soluzioni agli errori lungo la mia carriera.
Quale miglior modo di scrivere per bene tutte queste soluzioni e offrirle a persone come te? Incominciamo!
Eseguire il C e il C++ da Python: ci serve una libreria
Era semplice la cosa, te l’avevo detto!
Per raggiungere il nostro obiettivo, abbiamo bisogno di una libreria Python: argomento di cui ho parlato tante volte nel blog, tanto da crearci un’intera categoria che ti invito a scoprire, beh… Si tratta di pybind11.
E un pacchetto dal peso leggero che permette proprio di fare ciò che stiamo cercando di realizzare.
Una volta che abbiamo provveduto ad installarlo con pip:
pip install pybind11
Un esempio guidato per eseguire il C in Python
La prima cosa da fare, è aggiungere la libreria:
#include <pybind11/pybind11.h>
namespace py = pybind11;
Successivamente, creiamo una funzione che ci servirà per realizzare il nostro primo esempio funzionante:
int somma(int a, int b){
return a + b;
}
A seguito, ci servirà il pezzo di codice che eseguirà il “bind”, ci arriviamo dopo:
PYBIND11_MODULE(esempio, m) {
m.doc() = "Esempio di implementazione"; // stringa per la documentazione opzionale
m.def("somma", &somma, "Una funzione che somma due numeri interi");
}
Così facendo, il nostro file C per intero sarà come segue:
#include <pybind11/pybind11.h>
namespace py = pybind11;
int somma(int a, int b){
return a + b;
}
PYBIND11_MODULE(esempio, m) {
m.doc() = "Esempio di implementazione"; // stringa per la documentazione opzionale
m.def("somma", &somma, "Una funzione che somma due numeri interi");
}
Cerchiamo di capire come avviene tutto questo, ma prima salva il tutto in file che per praticità puoi chiamare “esempio.cpp”.
La macro PYBIND11_MODULE crea una funzione che sarà chiamata quando verrà utilizzata la import dentro uno script Python. Il nome del modulo, che in questo caso è “esempio”, nonché primo argomento della macro stessa. Il secondo, che è “m”, definisce una variabile di tipo py::module_ che sarà la nostra interfaccia principale al fine di creare il “bind” a cui accennavo prima.
Il bind in questione è il “ponte” che permette di eseguire il C oppure il C++ a seconda dei casi da uno script Python.
A conclusione, ci serve capire un ultimo punto: il metodo “module_::def()” genera appunto il codice di binding che permette di esporre la funzione “somma” scritta in C all’interno del tuo script Python.
E una volta eseguita la compilazione come da guida ufficiale, vediamo come eseguire il nostro Python
A questo punto, a seconda del tuo sistema operativo, una folta eseguita la compilazione, è molto semplice invocare il codice scritto in C in uno script Python.
import esempio
print(esempio.somma(4,5))
>>> 9