Voglio chiamare una libreria C da un'applicazione Python. Non voglio racchiudere l'intera API, solo le funzioni e i tipi di dati rilevanti per il mio caso. A mio avviso, ho tre opzioni:
- Crea un modulo di estensione reale in C. Probabilmente eccessivo, e vorrei anche evitare il sovraccarico di apprendimento della scrittura di estensione.
- Utilizzare Cython per esporre le parti rilevanti dalla libreria C a Python.
- Fai tutto in Python, usando
ctypes
per comunicare con la libreria esterna.
Non sono sicuro se 2) o 3) sia la scelta migliore. Il vantaggio di 3) è che ctypes
fa parte della libreria standard e il codice risultante sarebbe Python puro, anche se non sono sicuro di quanto sia effettivamente grande quel vantaggio.
Ci sono più vantaggi / svantaggi con entrambe le scelte? Quale approccio mi consigliate?
Modifica: grazie per tutte le tue risposte, forniscono una buona risorsa per chiunque cerchi di fare qualcosa di simile. La decisione, ovviamente, deve ancora essere presa per il singolo caso: non esiste una sorta di risposta "Questa è la cosa giusta". Per il mio caso, probabilmente andrò con i tipi, ma non vedo l'ora di provare Cython in qualche altro progetto.
Non essendoci una sola risposta vera, accettarne una è in qualche modo arbitrario; Ho scelto la risposta di FogleBird in quanto fornisce una buona visione dei tipi e attualmente è anche la risposta più votata. Tuttavia, suggerisco di leggere tutte le risposte per ottenere una buona panoramica.
Grazie ancora.