IPython
# IPython

IPython ist ein Kommandozeileninterpreter zum interaktiven Arbeiten mit der Programmiersprache Python. Es handelt sich nicht um eine bloße Erweiterung der in Python eingebauten Shell (siehe interaktive Benutzung von Python), sondern um eine Softwaresuite zum Entwickeln und Ausführen von Python-Programmen. Funktionen wie Introspektion, Befehlszeilenergänzung, Rich-Media-Einbettung und verschiedenen Frontends (Terminal, Qt-basiert oder browserbasiert) ermöglichen es, Python-Anwendungen mit einem Komfort zu entwickeln, wie man ihn von Software wie Matlab oder Mathematica kennt. IPython kann auch als integrierte Entwicklungsumgebung betrachtet werden. Tatsächlich handelt es sich bei IPython um ein Client-Server-Framework, welches für High-Performance-Rechnungen durch Parallelrechner verwendet werden kann.

## Ursprung

IPython wurde 2001 von Fernando Pérez entwickelt, es entstammt der Domäne des wissenschaftlichen Rechnens. Da er aus Mathematica ein Notebook kannte und er dies in Python vermisste, fing er an eines für Python zu programmieren.
Die Integration von Matplotlib in die Notebookoberfläche macht es zu einem Open-Source-Konkurrenten für die verbreitete Numerik-Software Matlab, weswegen man die Kombination von IPython mit Matplotlib oft auch als Pylab bezeichnet.

## Architektur und Notebook

Eine Besonderheit bei IPython ist der Einbau der Messagequeue ØMQ (vgl. Message Oriented Middleware). So trennt die Architektur von IPython klar das Backend als die Recheneinheit, etwa der Python-Interpreter, von dem Frontend als Darstellungsebene. Diese Trennung erlaubt es, IPython weitgehend universal für verschiedene Backends (oft auch Kernel genannt) und Frontends zu verwenden. Mithilfe des eventbasierten Python-Webservers Tornado und WebSockets stellt eine Weboberfläche ein mögliches Frontend dar. Dies erlaubt es, IPython im modernen Web (Web 2.0) flexibel einzusetzen.
IPython ist dokumentenorientiert. Ein IPython-Dokument wird, wie in dem wissenschaftlichen Umfeld üblich, als Notebook bezeichnet. Ein Notebook ist eine JSON-Datei, die eine geordnete Liste von Eingabe- und Ausgabezellen enthält, welche Code, Plain text, LaTeX-Ausgaben, Plots und diverse Medienformate darstellen kann. Damit unterscheidet sich ein IPython-Notebook grundsätzlich etwa von einem einfachen Python-Script, welches (in der Regel) nur Code enthält.
Beginnend mit Version 4.0 wurde das Projekt insgesamt aufgeteilt und weiter modularisiert. IPython wird fortan nicht länger als einzelnes, monolithisches Paket vertrieben, sondern begrenzt sich nun auf die an Python gebundenen Kernkomponenten. Sämtliche sprachunabhängige Module (wie das Notebook, die Qtconsole und die Messagequeue) wurden dagegen in ein neues Projekt namens Jupyter ausgelagert und können so zukünftig auch unabhängig von IPython genutzt und aktualisiert werden.