Erweiterung und Einbettung des Python-Interpreters¶
Dieses Dokument beschreibt, wie du Module in C oder C++ schreibst, die den Python-Interpreter um neue Module erweitern. Diese Module können das Gleiche tun wie Python-Code – Funktionen, Objekttypen und Methoden definieren –, aber auch mit nativen Bibliotheken interagieren oder mehr Geschwindigkeit erreichen, indem sie den Overhead eines Interpreters vermeiden. Das Dokument beschreibt außerdem, wie du den Python-Interpreter in eine andere Anwendung einbettest, um ihn als Erweiterungssprache zu nutzen. Schließlich wird gezeigt, wie du Erweiterungsmodule kompilierst und verknüpfst, damit sie dynamisch (zur Laufzeit) in den Interpreter geladen werden können, sofern das zugrunde liegende Betriebssystem das unterstützt.
Dieses Dokument setzt Grundkenntnisse in C und Python voraus. Eine informelle Einführung in Python findest du unter Das Python-Tutorial. Unter Die Python-Sprachreferenz findest du eine formellere Definition der Sprache. Unter Referenz der integrierten Python-Objekte werden die integrierten Funktionen und Objekttypen dokumentiert, und unter Die Python-Standardbibliothek werden die Module (sowohl integrierte als auch in Python geschriebene) beschrieben, die der Sprache ihr breites Anwendungsspektrum verleihen.
Eine ausführliche Beschreibung der gesamten Python/C-API findest du in der separaten Dokumentation unter Python/C-API-Referenzhandbuch.
Zur Unterstützung von Erweiterungen definiert die C-API (Application Programming Interface) von Python eine Reihe von Funktionen, Makros und Variablen, die Zugriff auf die meisten Aspekte des Python-Laufzeitsystems bieten. Die Python-API wird durch Einbinden des Headers "Python.h" in eine C-Quelldatei integriert.
Bemerkung
Die C-Erweiterungsschnittstelle ist spezifisch für CPython, und Erweiterungsmodule funktionieren nicht mit anderen Python-Implementierungen. In vielen Fällen ist es möglich, das Schreiben von C-Erweiterungen zu vermeiden und die Portabilität auf andere Implementierungen zu wahren. Wenn dein Anwendungsfall beispielsweise den Aufruf von C-Bibliotheksfunktionen oder Systemaufrufen umfasst, solltest du die Verwendung des Moduls ctypes oder der Bibliothek cffi in Betracht ziehen, anstatt eigenen C-Code zu schreiben. Diese Module ermöglichen es dir, Python-Code zur Anbindung an C-Code zu schreiben, und sind zwischen verschiedenen Python-Implementierungen portabler als das Schreiben und Kompilieren eines C-Erweiterungsmoduls.
Empfohlene Werkzeuge von Drittanbietern¶
Dieses Dokument behandelt lediglich die grundlegenden Werkzeuge zur Erstellung von Erweiterungen, die als Teil dieser Version von CPython bereitgestellt werden. Einige Werkzeuge von Drittanbietern bieten sowohl einfachere als auch mächtigere Ansätze, um C- und C++-Erweiterungen für Python zu erstellen.
Dieses Dokument richtet sich zwar an Autoren von Erweiterungen, dürfte aber auch für die Autoren solcher Werkzeuge hilfreich sein. So kann etwa das Tutorial-Modul als einfacher Testfall für ein Bauwerkzeug oder als Beispiel für die erwartete Ausgabe eines Codegenerators dienen.
C-API-Tutorial¶
Dieses Tutorial beschreibt, wie du ein einfaches Modul in C oder C++ mit der Python-C-API schreibst – also mit den grundlegenden Werkzeugen, die als Teil dieser Version von CPython bereitgestellt werden.
Leitfäden zu fortgeschrittenen Themen¶
Dieser Abschnitt des Leitfadens befasst sich damit, C- und C++-Erweiterungen ohne Werkzeuge von Drittanbietern zu erstellen. Er richtet sich in erster Linie an die Autoren dieser Werkzeuge und ist keine empfohlene Vorgehensweise für eigene C-Erweiterungen.
Die CPython-Laufzeitumgebung in eine größere Anwendung einbetten¶
Manchmal ist es wünschenswert, statt einer Erweiterung, die als Hauptanwendung innerhalb des Python-Interpreters läuft, die CPython-Laufzeitumgebung in eine größere Anwendung einzubetten. In diesem Abschnitt werden einige Details behandelt, die für eine erfolgreiche Umsetzung erforderlich sind.