Maison >développement back-end >Tutoriel Python >Comment les ctypes peuvent-ils relier de manière transparente les bibliothèques Python et C/C ?
Appel de C/C depuis Python avec ctypes
Lorsque l'on cherche à établir un pont entre Python et C/C , le module ctypes apparaît comme un choix privilégié. Son intégration transparente avec la bibliothèque standard de Python garantit la stabilité et une accessibilité généralisée. Contrairement à swig, qui peut parfois rencontrer des problèmes, ctypes fournit un pont fiable entre les deux langages.
ctypes excelle dans sa capacité à gérer les dépendances à la compilation sur Python, permettant à vos liaisons de fonctionner parfaitement sur n'importe quelle installation Python qui prend en charge les ctypes, quelle que soit la version utilisée pour la compilation.
Pour illustrer son utilisation, considérons la classe C suivante nommée Foo :
#include <iostream> class Foo { public: void bar() { std::cout << "Hello" << std::endl; } };
Puisque les ctypes ne peuvent interagir qu'avec les fonctions C, vous devez déclarer ces fonctions comme extern "C":
extern "C" { Foo* Foo_new() { return new Foo(); } void Foo_bar(Foo* foo) { foo->bar(); } }
Compilez ce code dans une bibliothèque partagée :
g++ -c -fPIC foo.cpp -o foo.o g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
Enfin, créez un wrapper Python pour relier la connexion :
from ctypes import cdll lib = cdll.LoadLibrary('./libfoo.so') class Foo(object): def __init__(self): self.obj = lib.Foo_new() def bar(self): lib.Foo_bar(self.obj)
Avec cette configuration, vous peut facilement appeler la bibliothèque C à partir de Python :
f = Foo() f.bar() # Prints "Hello" on the screen
ctypes fournit une solution simple et efficace pour construire des liaisons Python aux bibliothèques C/C, facilitant ainsi une interopérabilité transparente entre ces langages de programmation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!