Je veux appeler une bibliothèque C à partir d'une application Python. Je ne veux pas envelopper l'API entière, seulement les fonctions et les types de données qui sont pertinents pour mon cas. Selon moi, j'ai trois choix:
- Créez un module d'extension réel en C. Probablement exagéré, et j'aimerais également éviter la surcharge d'apprentissage de l'écriture d'extension.
- Utilisez Cython pour exposer les parties pertinentes de la bibliothèque C à Python.
- Faites le tout en Python, en utilisant
ctypes
pour communiquer avec la bibliothèque externe.
Je ne sais pas si 2) ou 3) est le meilleur choix. L'avantage de 3) est qu'il ctypes
fait partie de la bibliothèque standard, et le code résultant serait du pur Python - même si je ne suis pas sûr de la taille réelle de cet avantage.
Y a-t-il plus d'avantages / inconvénients avec l'un ou l'autre choix? Quelle approche recommandez-vous?
Edit: Merci pour toutes vos réponses, elles fournissent une bonne ressource pour quiconque cherche à faire quelque chose de similaire. La décision, bien sûr, doit encore être prise pour le cas unique — il n'y a pas une seule sorte de réponse "C'est la bonne chose". Pour mon propre cas, j'irai probablement avec des ctypes, mais j'ai aussi hâte d'essayer Cython dans un autre projet.
En l'absence d'une seule vraie réponse, l'accepter est quelque peu arbitraire; J'ai choisi la réponse de FogleBird car elle donne un bon aperçu des ctypes et c'est actuellement la réponse la plus votée. Cependant, je suggère de lire toutes les réponses pour avoir un bon aperçu.
Merci encore.