Dies ist ein Vortrag von der PyCon US 2025.
Leitfaden für den Übergang von Jupyter Notebook zu einem skalierbaren System
Jupyter Notebook ist ein sehr nützliches Werkzeug für interaktive Analysen wie Datenexploration, Visualisierung und Lehre. Sobald Code jedoch in Produktionsumgebungen bereitgestellt werden soll und Wiederverwendbarkeit, Automatisierung sowie Robustheit wichtiger werden, zeigen sich die Grenzen von Notebooks. Dieser Artikel stellt den Prozess und die wichtigsten Kniffe vor, um in Jupyter Notebook geschriebenen Code in ein skalierbares System zu überführen, das leicht wartbar und reproduzierbar ist.
Vor- und Nachteile von Notebooks
- Vorteile: Da sich Code und Text gemeinsam betrachten lassen und Ergebnisse sofort überprüft werden können, eignen sie sich hervorragend für explorative Datenanalyse und Lehre. [00:03:18]
- Nachteile: Je nach Ausführungsreihenfolge der Zellen kann sich der Zustand von Variablen ändern, Versionsverwaltung ist schwierig, und Automatisierung sowie Wiederverwendung des Codes sind erschwert, was die Skalierbarkeit behindert. [00:04:24]
Wann sollte man zu Skripten wechseln?
- Wenn Code in einer Produktionsumgebung bereitgestellt werden muss
- Wenn andere Personen den Code wiederverwenden sollen
- Wenn der Code automatisch ausgeführt werden muss
- Wenn Robustheit des Codes wichtig ist
- Wenn das Notebook zu komplex geworden ist [00:05:32]
Zentrale Schritte und Werkzeuge für die Umstellung
1. Code extrahieren und umwandeln
- NBConvert & Jupytext: Der Code eines Notebooks lässt sich damit leicht in ein Python-Skript extrahieren. Besonders Jupytext ist nützlich, da es auch eine Synchronisationsfunktion zwischen Notebook und Skript bietet. [00:10:44]
2. Refactoring-Prozess
- Arbeit nach Funktionseinheiten trennen: Identifizieren Sie die einzelnen Schritte im Notebook, erstellen Sie für jeden Schritt passende Funktionen und verschieben Sie den Code in diese Funktionen. [00:12:52]
- Testcode schreiben: Schreiben Sie Unit-Tests oder Integrationstests, um die Korrektheit des Codes sicherzustellen. Das ist besonders wichtig, um Fehler zu vermeiden, die beim Kopieren und Einfügen entstehen können. [00:13:08]
- Anforderungen und Abhängigkeiten verwalten: Machen Sie Module und ihre Abhängigkeiten klar, damit sich der Code auch in anderen Umgebungen leicht ausführen lässt. [00:13:15]
- CI/CD einführen: Richten Sie eine CI/CD-Pipeline (Continuous Integration/Continuous Deployment) ein, um den Bereitstellungsprozess zu automatisieren. [00:13:15]
Zusätzliche Tipps zur Verbesserung der Codequalität
- Konsistentes Code-Formatting: Verwenden Sie einen Code-Formatter, um Konsistenz zu wahren.
- Dokumentation: Gewöhnen Sie sich daran, den Zweck und die Verwendung des Codes klar zu dokumentieren.
- Konfiguration trennen: Verwalten Sie Einstellungen und Konfigurationsinformationen getrennt in eigenen Dateien. [00:21:11]
Zentrale Kompetenzen und Umdenken in der Arbeitsweise
- Modularisierung: Die Fähigkeit, Code in wiederverwendbare modulare Funktionen zu zerlegen, ist entscheidend.
- Automatisierung: Automatisieren Sie Workflows, um die Effizienz zu steigern.
- Testgetriebenes Refactoring: Verbessern Sie den Code mithilfe von Tests, während die Stabilität der Funktionen erhalten bleibt.
Wichtig ist, in der Explorationsphase die Flexibilität von Jupyter Notebook aktiv zu nutzen und sich zugleich eine Denkweise anzueignen, Produktionscode in robuste, reproduzierbare und automatisierte Skripte zu überführen. [00:22:16]
Noch keine Kommentare.