Python-C-Extensions schreiben mit C und Cython
Python-C-Extensions schreiben mit C und Cython
Ein praxisorientierter Leitfaden zur Erweiterung und Beschleunigung von Python mit C und Cython
Inhaltsverzeichnis
Kapitel 1: Warum Python mit C erweitern?
- Performance-Gründe und native Bibliotheken
- Vergleich: reines Python vs. C-Extension vs. Cython
- Mögliche Anwendungsfälle: Mathe, Bildverarbeitung, Parser
- Überblick: CPython API, Cython, ctypes, cffi
Kapitel 2: Einstieg in die Python-C-API
- Aufbau einer C-Erweiterung
- Python-Header einbinden (Python.h)
- PyObject, Referenzzählung, Rückgabewerte
- Mini-Projekt: „Hello from C“ in Python aufrufen
Kapitel 3: C-Funktionen nach Python exportieren
- Funktionssignaturen (PyObject*)
- Argument-Parsing mit PyArg_ParseTuple()
- Rückgabe von Zahlen, Strings, Listen
- Mini-Projekt: Mathematische Funktionen als C-Module
Kapitel 4: C-Module kompilieren und einbinden
- Verwendung von setuptools und Extension
- setup.py oder pyproject.toml
- Kompilieren, installieren und importieren
- Mini-Projekt: Schnelle Stringoperationen als C-Modul
Kapitel 5: Arbeiten mit Arrays und Pufferobjekten
- Zugriff auf NumPy-Arrays in C
- buffer protocol, Pointer, Stride
- Mini-Projekt: Bildfilterung über NumPy in C realisieren
Kapitel 6: Einstieg in Cython
- Was ist Cython?
- Vorteile gegenüber purer C-API
- Typisierung und Cython-Dateien (.pyx, .pxd)
- Mini-Projekt: Schneller Algorithmus mit Cython umsetzen
Kapitel 7: Python-Module mit Cython erstellen
- cythonize() und setup.py
- cdef, cpdef, def – was ist was?
- Kombination von Python- und C-Funktionen
- Mini-Projekt: Cython-Paket mit mathematischen Operationen
Kapitel 8: C-Bibliotheken in Cython einbinden
- Externe C-Funktionen importieren
- Header-Dateien mit .pxd-Definitionen nutzen
- Mini-Projekt: OpenSSL oder zlib über Cython aufrufen
Kapitel 9: Performance-Analyse und Debugging
- Laufzeitvergleich mit timeit
- Profiler für Cython verwenden
- Debuggen von C-Erweiterungen
- Mini-Projekt: Optimierung eines rechenintensiven Moduls
Kapitel 10: Best Practices und Sicherheit
- Fehlerbehandlung in C (NULL, Exceptions)
- Speicherlecks und Referenzzähler kontrollieren
- Portabilität und Build-Systeme (Linux, Windows, macOS)
- Tipps zur Kombination mit purem Python-Code
Anhang A: Die wichtigsten Funktionen der Python-C-API
- PyArg_ParseTuple, Py_BuildValue, Py_INCREF, Py_DECREF, PyList_New etc.
Anhang B: Vergleich: C, Cython, ctypes, cffi
- Was eignet sich wann?
- Vor- und Nachteile jeder Methode
Anhang C: Übungsaufgaben mit Lösungen
- Eigene C-Funktion schreiben und einbinden
- Rechenmodul mit Cython implementieren
- C-Bibliothek in Cython aufrufen
- Lösungen mit Schritt-für-Schritt-Kommentaren