Come eseguire il C e il C++ da uno script Python

di Lorenzo Neri
285 visualizzazioni

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

Continua a scoprire di più con questi articoli!

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più