IPython Notebook bietet eine nahtlose Integration von Dokument, Programm und Werkzeugen. Damit erleichtert es das gemeinsame Arbeiten erheblich.
Die Skriptsprache Python brachte schon immer einen interaktiven Modus mit. Die Eingabe von python auf der Kommandozeile startet den sogenannten Read.eval.print loop (REPL) [1]. Nach der Eingabe einer Codezeile antwortet der REPL mit dem Ergebnis. Der Aufsatz IPython [2] mit seinem Fokus auf Interaktivität bietet eine wesentlich verbesserte REPL-Version. Obwohl es aus dem wissenschaftlichen Bereich kommt, möchten viele Administratoren und Entwickler IPython nicht mehr missen.
Der Einsatz von IPython auf der Shell bringt jedoch einige Nachteile mit sich: Neben der auf eine Zeile beschränkten Eingabe stellt vor allem die Flüchtigkeit der Eingaben ein Problem dar. IPython bietet zwar eine über Sessions hinwegreichende Befehlsgeschichte, sodass Sie selbst nach einem Neustart die vorher eingegebenen Befehle finden. Hier springt das komfortablere IPython Notebook in die Bresche, das alle Eingaben speichert. Als Ausgabe unterstützt es nicht nur Text, sondern darüber hinaus auch HTML, Bilder und sogar GUI-Elemente.
IPython Notebook funktioniert nach dem Client-Server-Prinzip: Der Server läuft meist auf localhost und kommuniziert mit dem Client, einem HTML5-fähigen Browser wie etwa Firefox. Das Ganze setzt außerdem voraus, dass Websockets und Client-Side Storage funktionieren. Der Kasten “Installation” erläutert, wie Sie IPython Notebook ins System integrieren.
Installation
IPython Notebook funktioniert mit Python 2 und 3. Es gibt mehrere Möglichkeiten der Installation. Falls Sie Pip nutzen, kommen Sie mit pip install "ipython[notebook]" zum Ziel. Möchten Sie andere Pakete wie NumPy oder Pandas installieren, empfiehlt sich die Anaconda-Distribution, auf deren Download-Seite sich eine Installationsbeschreibung [5] findet. Es besteht zudem die Möglichkeit, den Paketmanager der verwendeten Distribution zu nutzen. Er liefert aber meist eine ältere Version, die möglicherweise einige der hier vorgestellten Möglichkeiten noch nicht unterstützt.
Los geht’s
Haben Sie das Programm installiert, starten Sie mit ipython notebook ein neues Fenster des Browsers. Nach der Auswahl von New und im Auswahlmenü Python 3 öffnet sich ein neues Notizbuch (Abbildung 1). Die Menüs erlauben ein komfortables Bedienen. Der Eintrag Kernel weist darauf hin, dass das Notebook als Client agiert und sich mit einem lokal auf der Maschine laufenden Server verbindet; im Hintergrund agieren Tornado [3] und ZeroMQ [4].
Als erste Aktion sollten Sie immer das Umbenennen des Dateinamens in Angriff nehmen. Dazu klicken Sie auf Untitled und geben im sich öffnenden Fenster den gewünschten Namen ein. Im Dateisystem finden Sie dann die Datei Name.ipynb, in der alle Informationen des Notebooks im JSON-Format liegen. Die grau hinterlegte Zelle steht für die Eingabe von Python-Kommandos bereit. Es empfiehlt sich jedoch häufig, zuerst etwas einleitenden Text zu schreiben. Dazu ändern Sie die Art der Zelle über das Ausklappmenü in der Mitte von Code zu Markdown.
Markdown lässt sich sehr einfach nutzen und erlaubt zudem im Bedarfsfall den direkten Einsatz von HTML. Mit den drei Grundregeln, dass eine Leerzeile einen neuen Absatz erzeugt, ein Asterisk (*) einen Listenpunkt und die Hash-Zeichen #, ##, ### eine Überschrift der ersten, zweiten beziehungsweise dritten Ebene, entstehen oft schon ausreichend formatierte Texte (Abbildung 2). Zur nächsten Zelle geht es mit [Umschalt]+[Eingabe].

Abbildung 2: Mittels Markdown-Text fügen Sie in ein Notebook zusätzlichen Text ein, der über grundlegende Formatierungen verfügt.
Im Browser programmieren
Den Kern eines Notebooks stellt freilich der Python-Code dar. Wie am interaktiven Prompt erscheint auch bei IPython Notebook nach Abschluss des Kommandos mit [Umschalt]+[Eingabe] das Ergebnis eines Ausdrucks. Dabei korrespondiert die Nummerierung der Eingabezelle In [1]: mit der des Ergebnisses Out[1]:.
Zellen dürfen mehrzeilig ausfallen, Syntax-Hervorhebung und automatische Einrückung sind Standard. Zusätzlichen Komfort bieten das Vervollständigen mit der Tabulator-Taste und eine interaktive Hilfe. Letztere rufen Sie über ein Fragezeichen nach dem Objekt auf, über das Sie mehr wissen möchten, wie zum Beispiel sys?. Daraufhin erscheint die eingebaute Dokumentation samt einiger Zusatzinformationen (Abbildung 3).

Abbildung 3: Mit einem angehängten Fragezeichen erhalten Sie einen Hilfetext samt zusätzlicher Informationen.
IPython bietet viele sogenannte magische Kommandos (siehe Tabelle “Magische Kommandos”). Sie beginnen stets mit einem Prozentzeichen (%); das Kommando %quickref liefert einen Überblick. Zwei wichtige Vertreter sind %ls und %less, die in ihrer Funktion den gleichnamigen Shell-Kommandos entsprechen. Sie funktionieren aber unabhängig vom Betriebssystem, sodass Sie auch bei einem Ausflug zu Windows damit arbeiten können.
Reicht die Zauberkraft dieser Magie nicht aus, führen Sie durch Voranstellen von ! direkt Shell-Befehle aus (Abbildung 4). Die Rückgabewerte speichern Sie bei Bedarf in Python-Variablen ab. So legt der Aufruf t = !ls | grep Not das Ergebnis des Grep-Befehls in t ab, im Regelfall in Form einer Liste (['Notebook.ipynb']).
Magische Kommandos
| %alias | Alias für einen Systembefehl definieren |
| %autocall | ermöglicht Funktionsaufrufe ohne Klammern |
| %automagic | magische Funktionen ohne vorangestelltes % erkennen |
| %autosave | Autosave-Intervall in Sekunden einstellen |
| %bookmark | Lesezeichenverwaltung |
| %cd | Verzeichniswechsel |
| %hist | Befehlshistorie abrufen |
| %ls | Verzeichnisinhalt |
| %magic | Informationen zu den magischen Funktionen |
| Weitere Kommandos | |
|---|---|
| Objekt? | Hilfe zu einem Objekt abrufen |
| !Befehl | Shell-Befehl direkt ausführen |
| Variable = !Befehl | Ausgabe eines Shell-Befehls speichern |
Bilder einbinden
Python bietet in Form von matplotlib einen De-facto-Standard zum Darstellen von Diagrammen [6]; Notebook unterstützt die direkte Ausgabe von Bildern. Das magische Kommando %matplotlib inline schaltet den dazu nötigen Modus ein (Abbildung 5) und gibt als Bild eine statische PNG-Datei aus. Es gibt aber diverse Erweiterungen, die es Ihnen erlauben, interaktive Diagramme im Notebook anzuzeigen. Sie arbeiten mit Javascript zum Vergrößern von Ausschnitten.

matplotlib binden Sie bei Bedarf Bilder direkt in ein Notizbuch ein. Diese zeigt die Software als statische PNG-Dateien an.” width=”300″ height=”239″ />
Abbildung 5: Übermatplotlib binden Sie bei Bedarf Bilder direkt in ein Notizbuch ein. Diese zeigt die Software als statische PNG-Dateien an. Selbst Tabellen vermag das Notebook benutzerfreundlich anzuzeigen. Das setzt voraus, dass Objekte nur eine Methode _repr_html_() haben. Diese ruft das Notebook bevorzugt auf, noch vor der sonst üblichen Methode __repr__(). Abbildung 6 zeigt, wie ein Pandas-Dataframe mit einer _repr_html_()-Methode als Tabelle aussieht. Pandas [7] ist eine viel genutzte Bibliothek für die schnelle und komfortable Arbeit mit tabellenartigen Daten.

DataFrame, das eine spezielle Methode zur Anzeige mitbringt.” width=”300″ height=”177″ />
Abbildung 6: Die Tabelle im HTML-Format kommt vom ObjektDataFrame, das eine spezielle Methode zur Anzeige mitbringt.Viele kleine Helferlein
Die Liste der Annehmlichkeiten, die ein IPython-Notebook bietet, umfasst unter anderem auch Möglichkeiten zum Messen von Laufzeiten sowie zum Profiling. In Abbildung 7 sehen Sie eine Laufzeitmessung mithilfe von %timeit. Die Variante %%timeit wirkt, wie alle magischen Kommandos mit zwei Prozentzeichen, auf alle Zeilen in einer Zelle. Mit %prun add(1, 1) startet der Python-Profiler cProfile und zeigt an, welche Funktion wie viel Zeit zur Ausführung benötigt.
Auch wenn Sie kurz ausprobieren möchten, wie eine andere Version von Python oder eine ganz andere Programmiersprache eine bestimmte Aufgabe löst, bleiben Sie dazu im Notebook: So macht %%python2 eine Zeile zu einem Python-2-Programm, etwa, um damit in einem Python-3-Notebook Python-2-Code auszuprobieren. Das funktioniert bei Bedarf auch anders herum. Obendrein sind Sprachen wie Perl, LaTeX, Javascript oder Fortran mit einer entsprechend markierten Zelle einsatzbereit.
Bei Bedarf exportieren Sie IPython-Notebooks in statische HTML-Seiten oder als Python-Quelltext. Der mitgelieferte Konverter unterstützt noch viele andere Formate. So besteht unter anderem die Möglichkeit, Folien für einen Vortrag mit dem Notebook zu erstellen. Das bietet sich naturgemäß insbesondere für Vorträge über Python an, da sich Beispiele direkt testen lassen und die Syntaxhervorhebung gleich dabei ist.
Ausblick
IPython Notebook beschränkt sich schon lange nicht mehr nur auf die Skriptsprache Python: Es unterstützt mittlerweile weit über 40 Programmiersprachen. Deshalb wandern alle seine unabhängigen Teile in ein neues Projekt namens Jupyter, wobei die Entwickler auch neue Funktionen einbauen. Der Schwerpunkt liegt zurzeit auf der Möglichkeit der Zusammenarbeit von mehreren Anwendern, ähnlich wie bei Google Docs. Als weitere Großbaustelle nimmt das Team das Erstellen von GUI-Elementen für die Eingabe in Angriff.
Fazit
Bei IPython handelt es sich zweifellos um eine “Killer-App”: Auf wissenschaftlichen Python-Konferenzen gilt es als Standard-Werkzeug für Tutorials und setzt sich auch in Vorträgen mehr und mehr durch. Aufgrund seiner Vielseitigkeit eignet es sich daneben auch bestens zum Ausprobieren von Ideen. Nicht zuletzt erleichtert es dank seiner flachen Lernkurve Einsteigern den Zugang zum Programmieren. Ein ständig geöffnetes Notebook gehört schon jetzt zu den wichtigsten Tools für Python-Anwender – dem tragen die Entwickler durch ständige Pflege Rechnung (siehe Kasten “Interview mit IPython-Entwickler Thomas Kluywer”).
Interview mit IPython-Entwickler Thomas Kluywer
LinuxUser:Hallo, Thomas! Du bist ein Mitglied des IPython-Entwicklerteams. Was ist dein Hintergrund, und wie kamst du zum IPython-Projekt?
Thomas Kluywer: Mein akademischer Hintergrund ist Biologie, zu IPython bin ich in meiner Freizeit gekommen. Ohne zu wissen, auf was ich mich da einlasse, habe ich angefangen, es auf Python 3 zu portieren. Das IPython-Team hat mich herzlich aufgenommen, und so trug ich mehrere Jahre in meiner Freizeit zum Projekt bei. Vor zwei Jahren bekamen die Entwickler dann finanzielle Förderung und luden mich ein, in Berkeley fest an IPython zu arbeiten.
LU:Was ist an IPython so besonders, und wie unterscheidet sich speziell IPython Notebook von den traditionellen Ansätzen?
TK: IPython zielt vor allem auf das entdeckende Arbeiten mit dem Computer. Im Vergleich zu einer IDE oder einem Editor ist es viel interaktiver. Klappt etwas nicht auf Anhieb, kann man das Ganze unkompliziert noch einmal mit geänderter Eingabe wiederholen. Im Unterschied zu anderen interaktiven Umgebungen baut der Nutzer aber schrittweise ein Dokument auf, das er dann im Internet veröffentlichen und anderen zeigen kann.
LU:Wie viele Leute zählen zum Team, und wie läuft die Förderung?
TK: Das Kern-Team umfasst heute neun Voll- und Teilzeit-Entwickler. Darüber hinaus tragen mehr als 400 Leute in ihrer Freizeit etwas bei – die meisten aber nur punktuell, nur wenige regelmäßig. Der größte Teil des Teams wurde von einer Zuwendung der Sloan Foundation finanziert, die aber gerade zu Ende geht – wir suchen im Moment aktiv nach neuen Sponsoren. Daneben bezahlen Microsoft und Google je einen Entwickler; Rackspace und Bloomberg steuern je eine Teilzeitstelle bei.
LU:Kannst du uns mehr über den aktuellen Stand des Projekts, die nächsten Releases und die Pläne für die Zukunft erzählen?
TK: Als größte Neuerung vereinfacht das kommende IPython 3 die Unterstützung für verschiedene Programmiersprachen. Ursprünglich war eine Client-Server-Architektur mit mehreren Frontends für einen Kernel geplant. Es stellte sich aber schnell heraus, dass der umgekehrte Weg sinnvoller wäre, also ein Notebook-Frontend mit mehreren Kerneln. Alle sprachübergreifenden Teile heißen nun “Jupyter”, nur die Python-spezifischen Komponenten laufen weiter unter IPython. Für die Version 4 fassen wir die Unterstützung einer Live-Zusammenarbeit ins Auge, ähnlich wie bei Google Docs. Ein Entwickler widmet sich ausschließlich dieser Aufgabe.
LU:Hättest du einen Wunsch frei: Was würdest du dir für dieses Projekt wünschen?
TK: Mich interessiert besonders, Code aus einer grafischen Schnittstelle heraus zu generieren. Anstatt mit einer leeren Datei anzufangen, sollten Nutzer einfach durch Klicken mit der Maus ein Gerüst erstellen, das sie später erweitern – so wie beim Aufzeichnen von Makros in Excel. Mein Traum ist es, so etwas in IPython umzusetzen.
Der Autor
Dr.-Ing. Mike Müller ist Geschäftsführer der Python Academy [8], erster Vorstandsvorsitzender des Python Software Verband e.V. und ein erfahrener Python-Trainer. Seitdem er Python 1999 entdeckt hat, ist es seine bevorzugte Programmiersprache.
Infos
[1] REPL: http://en.wikipedia.org/wiki/Read-eval-print_loop
[2] IPython Notebook: http://ipython.org/notebook.html
[3] Tornado: http://www.tornadoweb.org
[4] ZeroMQ: http://zeromq.org
[5] Anaconda: http://continuum.io/downloads
[6] Matplotlib: http://matplotlib.org
[7] Pandas: http://pandas.pydata.org
[8] Python-Academy: http://www.python-academy.de







