Editoren für Jupyter Notebooks
Kategorie Software Engineering | 1 Kommentar »
Während meiner Erkundungstour von Jupyter Notebooks und SciPy habe ich diverse Editoren ausprobiert. Mit der Suche nach dem passenden Werkzeug kann man viel Zeit verbringen. Deshalb hier eine Entscheidungshilfe für den geneigten Leser.
PyCharm und Jupyter Notebooks
Als langjähriger zufriedener Nutzer verschiedener IDEs des Herstellers JetBrains habe ich natürlich zunächst PyCharm für die Bearbeitung meiner Jupyter Notebooks verwendet.
Wie der Zufall will, wurde in PyCharm Version 2019.2, veröffentlicht im Juli 2019, die Jupyter Notebooks Unterstützung vollständig überarbeitet. Die Jupyter Notebooks Unterstützung ist nur in der kommerziellen PyCharm Version enthalten, nicht in der kostenlosen Community Edition!
Die Tatsache, dass Notebook Dateien nicht nur den Quelltext des Notebooks, sondern auch die zugehörige Ausgabe enthalten, versteckt PyCharm gut. Während der Bearbeitung teilt sich der Editor. Auf der linken Seite bearbeitet man den Quelltext und auf der rechten Seite sieht man die zugehörige Ausgabe.
PyCharm startet den Jupyter Server im Hintergrund und erlaubt natürlich auch ein Debuggen des Quelltexts. Während des Tippens schlägt PyCharm wie gewohnt passende Funktionen vor. Das ist gerade für mich als SciPy Neuling hilfreich, da ich nicht alle Funktionen der einzelnen Bibliotheken auswendig kenne.
An dieser Stelle enden dann aber auch schon die Vorteile. Unpraktisch ist zum Beispiel, dass die Synchronisierung zwischen Eingabefenster und Ausgabefenster nicht einwandfrei funktioniert. Bearbeitet man eine Zelle, würde man erwarten, dass das Ausgabefenster an die entsprechende Stelle scrollt. Ein Klick im Ausgabefenster sollte auch zuverlässig das Eingabefenster zur zugehörigen Zelle scrollen. Das klappt nicht immer.
Ein Vorteil einer IDE wie PyCharm sind die umfangreichen Refactoring Möglichkeiten. Normalerweise kann man in PyCharm Variablen und Funktionen umbenennen, den Quelltext formatieren, Imports optimieren, etc. Das alles klappt in Jupyter Notebooks noch nicht richtig. In der aktuellen Version 2019.2 indiziert PyCharm Jupyter Notebooks nicht richtig. Die Behebung ist aktuell für Version 2019.3 versprochen.
Auch die Performance ist schlecht. Schon mein kleines „Klimawandel in Berlin Tegel“ Notebook bringt PyCharm an seine Grenzen. Nach mehrmaligen Ausführen und Änderung von Zellen hakt die IDE.
Im aktuellen Zustand kann ich PyCharm nicht für die Bearbeitung von Jupyter Notebooks empfehlen. Die Jupyter Notebooks Unterstützung hat das Niveau einer sehr frühen Beta. Ich hätte mir als Produktmanager nicht getraut, das groß anzukündigen. Aber vielleicht war da jemand in der Marketingabteilung auch einfach etwas voreilig.
Microsoft VS Code und Jupyter Notebooks
Visual Studio Code (oder kurz VS Code) von Microsoft ist der aktuell hipste Editor für alles, was Striche und Punkte hat. Natürlich unterstützt VS Code auch Jupyter Notebooks. Dazu muss lediglich das Python Plugin installiert werden.
Öffnet man eine Notebook Datei, fragt VS Code, ob es das Notebook importieren soll. Falls VS Code doch mal nicht fragt, kann man den Import auch manuell über das Kontextmenü anstoßen.
Wie schon in PyCharm wird auch in VS Code der Bildschirm in Eingabe und Ausgabefenster geteilt. Beide Fenster sind gut synchronisiert. Klickt man im rechten Ausgabefenster auf eine Zelle, springt der Editor im linken Fenster an die richtige Stelle.
Während der Eingabe von Quelltext gibt es keine echte Autovervollständigung. VS Code schlägt lediglich Zeichenketten vor, die man schon an anderer Stelle im Notebook verwendet hat. Das ist überraschend, denn bei der normalen Bearbeitung von Python Dateien funktioniert das besser. Refactoring wird ebenfalls nicht unterstützt.
Das Notebook wird während der Bearbeitung als neue unbenannte Datei dargestellt. Möchte man den aktuellen Stand speichern, muss man die Datei als Jupyter Notebook exportieren. Dies geht wieder über das Kontextmenü. Nachdem man die Datei exportiert hat, kann man den Export nicht mehr rückgängig machen.
Ich konnte mein Klimawandel Notebook flüssig bearbeiten. Hier ist VS Code klar im Vorteil gegenüber PyCharm. Durch die fehlende Autovervollständigung und den umständlichen Import/Export bietet es aber keine klaren Vorteile gegenüber dem offiziellen Jupiter Editor. Einzig das Kopieren und Verschieben mehrerer Zellen geht in VS Code wesentlich schneller von der Hand.
Offizieller Jupyter Notebook Editor
Nach meinen Erfahrungen mit PyCharm und VS Code habe ich einen Schritt rückwärts gemacht. Warum nicht einfach den offiziellen Editor nutzen, der in der Jupyter Web Oberfläche angeboten wird?
Bevor man dies tut, sollte man aber ganz unbedingt die Jupyter Extension „Hinterland“ installieren, damit der Editor Autovervollständigung anbietet. Ich habe Jupyter in einer Conda Umgebung installiert. Über folgende Befehle installiert man das Paket für die Hinterland Extension, aktiviert diese und startet anschließend den Jupyter Server samt Web Oberfläche.
conda install -c conda-forge jupyter_contrib_nbextensions
jupyter nbextension enable hinterland/hinterland
jupyter notebook
Im Jupyter Web Editor wird die Ausgabe einer Zelle unterhalb der Zelle angezeigt.
Während der Eingabe bietet der Editor Autovervollständigung an. Diese funktioniert ausreichend gut.
Leider fehlen dem Editor einige Tastenkürzel oder ich konnte sie schlicht nicht finden. So klickt man doch recht viel mit der Maus rum, etwa um Zellen zu verschieben, den Jupyter Prozess neu zu starten, eine neue Zelle einzufügen, den Typ einer Zelle von Code zu Markdown umzuschalten, etc.
Die Performance der Oberfläche und die Darstellung der Ausgabe ist rasend schnell. Das merkt man erst so richtig, nachdem man einige Zeit VS Code oder sogar PyCharm genutzt hat.
Ausblick: JupyterLab
In der IT Community gehört es zum guten Ton, aller paar Jahre das Rad neu zu erfinden. Deshalb wird auch schon an einem Nachfolger für die Jupyter Web Oberfläche gearbeitet. Der neue Zögling heißt: JupyterLab
Man kann JupyterLab folgendermaßen in einer Conda Umgebung installieren und starten:
conda install -c conda-forge jupyterlab
jupyter-lab
JupyterLab versteht sich schon wie sein Vorgänger nicht nur als Web Editor, sondern als webbasierte interaktive Umgebung für Daten, Code und die Präsentation der Ergebnisse.
Die Darstellung und Bearbeitung eines Notebooks ist identisch zu dem „alten“ Web Editor. Neben dem oben gezeigten Dark Mode gibt es auch eine helle Variante. Damit die Autovervollständigung funktioniert, muss man zuvor das Notebook gestartet haben (es muss also ein so genannter Kernel laufen).
Man kann in JupyterLab nicht nur Notebooks bearbeiten, sondern zum Beispiel auch eine Python 3 Konsole auf Basis von IPython öffnen. Auch weitere Editoren sind per Plugin oder in einer zukünftigen Version möglich. Wie in einer Desktop Anwendung lassen sich die Fenster vielfältig anordnen. Man kann natürlich auch mehrere Browser Fenster benutzen und so JupyterLab mit mehreren Monitoren nutzen.
Fazit Editoren für Jupyter Notebooks
JupyterLab ist sicher die Zukunft. Ob man den klassischen Jupyter Editor oder JupyterLab wählt, ist momentan Geschmackssache. Ein effizientes Arbeiten ist in beiden Editoren möglich.
PyCharm und VS Code kann ich aktuell nicht empfehlen. Das ist schade, denn so bin ich gezwungen, ein neues Werkzeug samt Tastenkombinationen zu lernen. Die Zeit hätte ich lieber ins Erkunden von SciPy gesteckt. Aber vielleicht sieht es in einem Jahr schon anders aus und die Kinderkrankheiten bei beiden Editoren sind ausgestanden? Wir werden sehen.
[…] Jupyter Notebooks bieten einen einfachen Einstieg in die Datenanalyse mittels SciPy. Das Speicherformat der Notebooks hingegen ist absoluter Unsinn und dürfte im Rahmen eines echten Projekts mit CI/CD Pipeline unendliche Kopfschmerzen verursachen. Mit der Bearbeitung (Programmierung) von Jupyter Notebooks bin ich auch nicht glücklich, da alle von mir getesteten Editoren Schwächen aufweisen. Das muss ich aber in einem anderen Beitrag ausführlich diskutieren. […]