cat posts/repl-power-ipython-ptpython.md
REPL-Power: Mehr aus der interaktiven Shell holen
Die neue REPL seit Python 3.13, praktische eingebaute Funktionen sowie die Alternativen IPython und ptpython – die interaktive Shell kann weit mehr als nur rechnen.
In Teil 1 der Python-Serie haben wir die REPL hauptsächlich als Taschenrechner verwendet. Damit verkaufen wir sie allerdings deutlich unter Wert.
Die interaktive Shell eignet sich hervorragend, um Code auszuprobieren, Datentypen und APIs zu erkunden, kleine Fehler nachzustellen oder eine Idee zu testen, ohne dafür jedes Mal ein Skript anzulegen.
Wer die REPL regelmäßig nutzt und ihre wichtigsten Funktionen kennt, kann sich beim Entwickeln viele kleine Umwege sparen. Seit Python 3.13 ist auch die eingebaute Shell deutlich komfortabler geworden.
Was ist eine REPL?
Die Abkürzung REPL steht für:
- Read: Eingabe lesen
- Evaluate: Eingabe auswerten
- Print: Ergebnis ausgeben
- Loop: auf die nächste Eingabe warten
Du startest die eingebaute REPL, indem Du Python ohne den Namen eines Skripts aufrufst:
python
Je nach Betriebssystem verwendest Du stattdessen möglicherweise python3 oder
py.
Anschließend kannst Du Python-Code direkt eingeben:
>>> 6 * 7
42
>>> name = "Karl"
>>> print(f"Willkommen, {name}!")
Willkommen, Karl!
Jede vollständige Eingabe wird sofort ausgeführt. Dadurch erhältst Du direkt Feedback, ohne eine Datei speichern und starten zu müssen.
Die neue REPL seit Python 3.13
Bis einschließlich Python 3.12 war die eingebaute REPL vergleichsweise spartanisch. Python 3.13 führte eine neue, in Python geschriebene Shell ein, die auf PyREPL basiert.
Sie wird standardmäßig verwendet, wenn Python in einem unterstützten interaktiven Terminal gestartet wird.
Mehrzeiliges Editing
Mehrzeilige Code-Blöcke werden als zusammengehörige Eingabe behandelt:
>>> for zahl in range(3):
... print(f"Runde {zahl}")
...
Runde 0
Runde 1
Runde 2
Holst Du diesen Code später mit der Pfeiltaste nach oben aus der History zurück, kannst Du den gesamten Block bearbeiten. Bei der alten REPL musste häufig jede Zeile einzeln wiederhergestellt werden.
Das ist besonders bei Funktionen, Schleifen und längeren Bedingungen hilfreich.
Farben für Prompts und Tracebacks
Prompts und Tracebacks werden standardmäßig farbig dargestellt, sofern das verwendete Terminal Farben unterstützt.
Dadurch lassen sich Fehlermeldungen und die entscheidenden Stellen eines Tracebacks schneller erkennen.
Direkte REPL-Kommandos
Die Kommandos help, exit und quit funktionieren in der neuen REPL auch ohne
Klammern:
>>> help
>>> exit
Die bisherigen Schreibweisen bleiben ebenfalls gültig:
>>> help()
>>> exit()
Die Funktionstasten F1 bis F3
Die neue REPL bringt drei praktische Funktionen mit:
| Taste | Funktion |
|---|---|
F1 |
Öffnet die interaktive Python-Hilfe |
F2 |
Öffnet eine übersichtliche History ohne Prompts und Outputs |
F3 |
Aktiviert oder beendet den Paste-Mode |
Der History-Browser über F2 zeigt nur den zuvor eingegebenen Code. Die Prompts
>>> und ... sowie die erzeugten Outputs werden ausgeblendet. Dadurch kannst
Du frühere Eingaben einfacher finden und erneut verwenden.
Der Paste-Mode über F3 erleichtert das Einfügen größerer Code-Blöcke. Ein
weiterer Druck auf F3 beendet ihn wieder.
Je nach Terminal oder Belegung der Funktionstasten können diese Shortcuts anders reagieren oder vom Terminal selbst abgefangen werden.
Weitere Verbesserungen in Python 3.14
Python 3.14 erweitert die neue REPL um zwei sichtbare Funktionen.
Syntax-Highlighting während der Eingabe
Python-Code wird bereits beim Tippen farblich hervorgehoben. Strings, Zahlen, Keywords und andere Bestandteile des Codes lassen sich dadurch leichter voneinander unterscheiden.
Das Syntax-Highlighting funktioniert, wenn das Terminal ANSI-Farben unterstützt und die Farbausgabe nicht deaktiviert wurde.
Autovervollständigung für Imports
Python 3.14 kann Module und Submodule beim Schreiben von Imports vervollständigen.
Gib beispielsweise Folgendes ein und drücke anschließend Tab:
import co
Die REPL kann nun passende Module vorschlagen, deren Name mit co beginnt.
Das funktioniert auch bei Submodulen:
from concurrent import i
Die Autovervollständigung schlägt hier passende Submodule von concurrent vor.
Attribute eines bereits importierten Moduls werden von dieser neuen
Import-Autovervollständigung allerdings noch nicht vollständig abgedeckt.
Auf die alte REPL zurückschalten
Falls die neue Shell in einem älteren oder ungewöhnlich konfigurierten Terminal
Probleme verursacht, kannst Du sie über die Umgebungsvariable
PYTHON_BASIC_REPL deaktivieren.
Unter Linux und macOS startest Du Python beispielsweise so:
PYTHON_BASIC_REPL=1 python
In der PowerShell kannst Du die Variable folgendermaßen setzen:
$env:PYTHON_BASIC_REPL = "1"
python
Python verwendet dann wieder die einfachere, traditionelle REPL.
Normalerweise ist das nicht notwendig. Die Option ist hauptsächlich zur Fehlersuche und für Terminals gedacht, in denen PyREPL nicht wie erwartet funktioniert.
Eingebaute Tricks, die Du kennen solltest
Auch ohne zusätzliche Tools bietet die Python-REPL einige Funktionen, die beim Erkunden von Code sehr hilfreich sind.
Das letzte Ergebnis mit _ weiterverwenden
Der Unterstrich _ enthält in der REPL automatisch das zuletzt ausgegebene
Ergebnis:
>>> 6 * 7
42
>>> _ + 1
43
>>> _ * 2
86
Das ist praktisch, wenn Du mit einem Ergebnis direkt weiterrechnen möchtest, ohne es vorher einer eigenen Variablen zuzuweisen.
Für längere oder wichtige Berechnungen solltest Du dennoch einen sprechenden Variablennamen verwenden:
schaden = 6 * 7
Objekte mit dir(...) erkunden
Die Funktion dir(...) zeigt Dir die Namen der Attribute und Methoden eines
Objekts oder Datentyps:
>>> dir(str)
['__add__', '__class__', ..., 'split', 'startswith', 'strip', ...]
Möchtest Du beispielsweise wissen, welche Methoden Strings besitzen, ist
dir(str) ein guter Ausgangspunkt.
Die Liste kann zunächst überwältigend wirken. Namen, die mit zwei Unterstrichen
beginnen und enden, sind spezielle Methoden. Für den Einstieg kannst Du Dich auf
Namen wie split, strip, lower oder startswith konzentrieren.
Hilfe mit help(...) anzeigen
Mit help(...) öffnest Du die eingebaute Dokumentation zu einem Objekt:
>>> help(str.strip)
Python zeigt Dir anschließend, wie die Methode verwendet wird und was sie zurückgibt.
dir(...) und help(...) ergänzen sich gut:
- Mit
dir(...)findest Du verfügbare Methoden. - Mit
help(...)liest Du nach, wie eine bestimmte Methode funktioniert. - Anschließend probierst Du sie direkt in der REPL aus.
Beispielsweise:
>>> text = " Dungeon "
>>> text.strip()
'Dungeon'
So kannst Du eine unbekannte API erkunden, ohne die REPL verlassen zu müssen.
Den Typ eines Wertes prüfen
Auch type(...) gehört zu den wichtigsten Werkzeugen beim interaktiven
Arbeiten:
>>> type(100)
<class 'int'>
>>> type("100")
<class 'str'>
>>> type(3.5)
<class 'float'>
Gerade bei Inputs oder Rückgabewerten von Funktionen hilft ein kurzer Blick auf den Datentyp häufig dabei, Fehler schnell zu verstehen.
IPython: Die Komfort-Shell
Die eingebaute REPL ist für kurze Experimente inzwischen sehr gut geeignet. Für umfangreicheres exploratives Arbeiten bietet IPython jedoch weiterhin zusätzliche Funktionen.
Du installierst IPython in Deiner Python-Umgebung mit:
python -m pip install ipython
Anschließend startest Du es mit:
ipython
IPython verwendet nummerierte Inputs und Outputs:
In [1]: zahlen = [1, 2, 3, 4]
In [2]: sum(zahlen)
Out[2]: 10
Die Nummern helfen dabei, frühere Ergebnisse wiederzufinden und später erneut zu referenzieren.
Hilfe mit ? und ??
Ein Fragezeichen hinter einem Objekt zeigt Informationen wie Signatur und Docstring an:
In [3]: sum?
Zwei Fragezeichen versuchen zusätzlich, den Quellcode anzuzeigen:
In [4]: sum??
Der Quellcode kann nur angezeigt werden, wenn er für das betreffende Objekt verfügbar ist. Bei manchen eingebauten oder in C implementierten Funktionen ist das nicht möglich.
Magic-Commands
IPython besitzt besondere Kommandos, die Magics genannt werden. Line-Magics
beginnen mit %, Cell-Magics mit %%.
Einige besonders nützliche Beispiele:
In [5]: %timeit sum(range(1000))
8.1 µs ± 120 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
In [6]: %run dungeon.py
In [7]: %history
In [8]: %edit
Die tatsächlich ausgegebenen Laufzeiten hängen vom Rechner, der Python-Version und der aktuellen Systemlast ab.
Wichtige Magics sind unter anderem:
| Magic | Zweck |
|---|---|
%timeit |
Misst wiederholt die Laufzeit eines Ausdrucks |
%run |
Führt ein Python-Skript aus |
%history oder %hist |
Zeigt frühere Inputs an |
%edit |
Öffnet Code in einem Editor |
%load |
Lädt Code in den aktuellen Input |
%lsmagic |
Zeigt die verfügbaren Magics an |
Mit einem Fragezeichen kannst Du auch die Dokumentation zu einer Magic anzeigen:
In [9]: %timeit?
Automatisches Reloading von Modulen
Beim Entwickeln an eigenen Modulen ist die autoreload-Extension besonders
praktisch:
In [10]: %load_ext autoreload
In [11]: %autoreload 2
IPython versucht anschließend, importierte Module vor der Ausführung des nächsten Inputs automatisch neu zu laden.
Dadurch kannst Du eine Python-Datei in Deinem Editor verändern und die neuen Änderungen anschließend in IPython testen, ohne die Shell nach jeder Änderung neu zu starten.
autoreload ist sehr praktisch, kann bei komplexen Modulen aber Grenzen haben.
Ein vollständiger Neustart der Shell bleibt deshalb manchmal die zuverlässigste
Möglichkeit, einen sauberen State herzustellen.
Shell-Kommandos ausführen
Mit einem Ausrufezeichen kannst Du einen Befehl an die Shell weiterreichen:
In [12]: !python --version
Python 3.14.6
Unter Linux und macOS könntest Du beispielsweise den Inhalt des aktuellen Verzeichnisses anzeigen:
In [13]: !ls
Unter Windows lautet der entsprechende Befehl meist:
In [13]: !dir
Diese Shell-Kommandos sind kein normaler Python-Code. Sie funktionieren nur in IPython und vergleichbaren Umgebungen.
ptpython: Eine REPL mit Editor-Gefühl
ptpython legt seinen Schwerpunkt stärker auf die Eingabe und Bearbeitung von
Code. Es basiert auf prompt_toolkit und bietet unter anderem:
- Syntax-Highlighting
- Autocompletion
- komfortables Multiline-Editing
- eine durchsuchbare History
- verschiedene Farbschemas
- Mausunterstützung
- Vi- und Emacs-Keybindings
- Bracketed Paste in unterstützten Terminals
Du installierst ptpython mit:
python -m pip install ptpython
Anschließend startest Du die Shell mit:
ptpython
Beim Tippen zeigt ptpython mögliche Vervollständigungen direkt an. Mehrzeilige Inputs lassen sich ähnlich wie in einem kleinen Editor bearbeiten.
Besonders interessant ist ptpython für Dich, wenn Du:
- regelmäßig längere Code-Blöcke in der REPL schreibst,
- viel Wert auf Autocompletion legst,
- Vi- oder Emacs-Keybindings bevorzugst,
- das Verhalten und Aussehen Deiner REPL konfigurieren möchtest.
IPython und ptpython kombinieren
ptpython kann auch als Frontend für IPython verwendet werden. Dadurch erhältst Du die Magic-Commands und weiteren Funktionen von IPython zusammen mit dem Editing und der Autocompletion von ptpython.
Dafür müssen beide Pakete installiert sein:
python -m pip install ipython ptpython
Anschließend startest Du die kombinierte Shell mit:
ptipython
Ob diese Kombination für Dich einen echten Vorteil bietet, hängt stark von Deinem Workflow ab. Für viele Aufgaben reicht entweder IPython oder ptpython allein vollkommen aus.
Welche REPL solltest Du verwenden?
| REPL | Geeignet für |
|---|---|
| Eingebaute REPL | schnelle Tests ohne zusätzliche Installation |
| IPython | Exploration, Benchmarks, Module und umfangreichere Sessions |
| ptpython | komfortables Editing, Autocompletion und eigene Keybindings |
| ptipython | Kombination aus IPython-Features und ptpython-Frontend |
Für den Einstieg in Python reicht die eingebaute REPL vollständig aus. Besonders mit Python 3.13 oder neuer bietet sie bereits die wichtigsten Komfortfunktionen.
IPython lohnt sich, sobald Du häufiger interaktiv arbeitest, Laufzeiten messen oder eigene Module während der Entwicklung untersuchen möchtest.
ptpython ist vor allem dann interessant, wenn Dir das Editieren innerhalb der Shell besonders wichtig ist.
Du musst Dich auch nicht dauerhaft auf eine Variante festlegen. Alle greifen letztlich auf Python zurück und können je nach Aufgabe nebeneinander verwendet werden.
Stolperfallen
-
_in einem Skript verwenden: Das automatische Speichern des letzten Outputs in_ist eine Funktion der REPL. In einem normalen Skript ist_lediglich ein gewöhnlicher Variablenname. -
REPL-Prompts in ein Skript kopieren:
>>>,...,In [1]:undOut[1]:gehören zur jeweiligen Shell und nicht in eine Python-Datei. -
IPython-Magics in normalem Python verwenden:
%timeit,%runund andere Magics sind keine gültige Python-Syntax. Sie funktionieren nur in IPython oder einer kompatiblen Umgebung. -
Shell-Kommandos mit Python-Code verwechseln: Eine Eingabe wie
!lswird von IPython an die System-Shell weitergegeben. Sie ist nicht Bestandteil der Programmiersprache Python. -
Den State einer langen Session vergessen: Variablen, Imports und andere Änderungen bleiben innerhalb einer laufenden REPL erhalten. Dadurch kann Code funktionieren, obwohl ein benötigter Schritt schon viel früher ausgeführt wurde. Bei unklaren Ergebnissen hilft häufig ein Neustart mit sauberem State.
-
autoreloadblind vertrauen: Nicht jede Änderung an einem Modul lässt sich in einer laufenden Session zuverlässig nachladen. Besonders bei komplexen Klassen oder importierten Objekten kann ein Neustart notwendig sein.
Fazit
Die eingebaute Python-REPL ist längst mehr als ein einfacher Taschenrechner. Seit Python 3.13 bietet sie Multiline-Editing, History-Browser, Paste-Mode und farbige Tracebacks. Python 3.14 ergänzt Syntax-Highlighting sowie Autovervollständigung für Imports.
Für kurze Tests und zum Lernen reicht diese REPL in den meisten Fällen aus.
IPython erweitert sie um Magics, komfortable Hilfe, Benchmarks, Shell-Integration und einen besser nachvollziehbaren Input- und Output-Verlauf. ptpython konzentriert sich dagegen stärker auf Editing, Autocompletion und konfigurierbare Bedienung.
Welche Shell am besten passt, entscheidet deshalb weniger der Funktionsumfang als Dein persönlicher Workflow.
0 Kommentare
Noch keine Kommentare. Sei der/die Erste!
Anmelden um einen Kommentar zu hinterlassen.