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.

esempio "shared object" C e Python, tramite libreria CFFI

Powered by: FreeFlarum.
(remove this footer)