Abbiamo già parlato di Cython (per quanto mi riguarda, risultato: bocciato 😄) e una mia strada invece molto alternativa e creativa per Unire C e Python, vediamo oggi un altro caso: richiamare una funzione C all'interno di un programma Python! Ammetto che ho fatto prove diverse sbattendoci un po' la testa, vi presento la soluzione tramite CFFI (sito ufficiale) che ho ritenuto pratica e valida:
C Foreign Function Interface for Python. Interact with almost any C code from Python, based on C-like declarations that you can often copy-paste from header files or documentation
Vediamo prima la procedura concettuale, poi un esempio operativo.
- creare un file .C, con all'interno ad esempio una nostra funzione
- dobbiamo creare un file di memoria condivisa, formato .so ("share object") che permette di fare da tramite
- dobbiamo aver installato la libreria Python cffi
- nel file Python includiamo la libreria cffi e tramite opportune funzioni, richiamiamo il file "share object" che contiene la definizione della nostra funzione
- possiamo eseguire tramite Python la nostra funzione, che era stata definita in C
Unire C e Python con CFFI: gli step da seguire
- verifichiamo che la libreria cffi sia installata, altrimenti la installiamo (tramite pip):
pip install cffi
- file C, in cui scriviamo ad esempio:
float f(float x){ return x*x; }
- da terminale:
gcc -fPIC -shared -o nomefile.so nomefile.c
, ovviamente prestando attenzione ai nomi - file Python, in cui scriviamo (alcune funzioni si potrebbero accorpare, scritto così esteso è più chiara la procedura):
from cffi import FFI ffi = FFI() ffi.cdef("float f(float x);") lib = ffi.dlopen("./function.so") def my_f(x): return lib.f(x) print(my_f(10))
- eseguiamo il nostro file Python:
python3 nomefile.py
In questo caso la funzione C è una semplice elevazione al quadrato e nel programma Python richiamiamo questa funzione mostrando a video il risultato di f(10) ovvero 100.
Una procedura abbastanza semplice, potenzialmente utile e interessante! 😀 Vediamo uno screenshot dei risultati.