IDLE — Python-Editor und Shell¶
Quellcode: Lib/idlelib/
IDLE ist Pythons integrierte Entwicklungsumgebung und Lernumgebung.
IDLE bietet folgende Funktionen
Plattformübergreifend: funktioniert größtenteils gleich auf Windows, Unix und macOS
Python-Shell-Fenster (interaktiver Interpreter) mit Farbkodierung für Code-Eingabe, -Ausgabe und Fehlermeldungen
Mehrfenster-Texteditor mit Mehrfach-Rückgängigmachen, Python-Farbkodierung, intelligentem Einrücken, Call-Tips, Autovervollständigung und weiteren Funktionen
Suche in jedem Fenster, Ersetzen in Editorfenstern und Suche in mehreren Dateien (grep)
Debugger mit persistenten Breakpoints, schrittweiser Ausführung und Anzeige von globalen und lokalen Namensräumen
Konfiguration, Browser und weitere Dialoge
Start und Codeausführung¶
Beim Start mit der Option -s führt IDLE die Datei aus, auf die durch die Umgebungsvariablen IDLESTARTUP oder PYTHONSTARTUP verwiesen wird. IDLE prüft zuerst auf IDLESTARTUP; wenn IDLESTARTUP vorhanden ist, wird die referenzierte Datei ausgeführt. Wenn IDLESTARTUP nicht vorhanden ist, prüft IDLE auf PYTHONSTARTUP. Dateien, auf die in diesen Umgebungsvariablen verwiesen wird, sind praktische Orte, um häufig verwendete Funktionen aus der IDLE-Shell zu speichern oder Importanweisungen auszuführen, um gängige Module zu importieren.
Zusätzlich lädt Tk auch eine Startdatei, wenn diese vorhanden ist. Beachten Sie, dass die Tk-Datei bedingungslos geladen wird. Diese zusätzliche Datei ist .Idle.py und wird im Home-Verzeichnis des Benutzers gesucht. Anweisungen in dieser Datei werden im Tk-Namensraum ausgeführt, daher ist diese Datei nicht nützlich zum Importieren von Funktionen, die aus der Python-Shell von IDLE verwendet werden sollen.
Befehlszeilenverwendung¶
IDLE kann mit verschiedenen Optionen über die Befehlszeile aufgerufen werden. Die allgemeine Syntax lautet
python -m idlelib [options] [file ...]
Folgende Optionen sind verfügbar
- -c <command>¶
Führt den angegebenen Python-Befehl im Shell-Fenster aus. Übergeben Sie beispielsweise
-c "print('Hallo, Welt!')". Unter Windows müssen die äußeren Anführungszeichen doppelte Anführungszeichen sein, wie gezeigt.
- -d¶
Aktiviert den Debugger und öffnet das Shell-Fenster.
- -e¶
Öffnet ein Editorfenster.
- -h¶
Gibt eine Hilfemeldung mit gültigen Optionskombinationen aus und beendet das Programm.
- -i¶
Öffnet ein Shell-Fenster.
- -r <file>¶
Führt die angegebene Datei im Shell-Fenster aus.
- -s¶
Führt die Startdatei aus (definiert durch die Umgebungsvariablen
IDLESTARTUPoderPYTHONSTARTUP), bevor das Shell-Fenster geöffnet wird.
- -t <title>¶
Setzt den Titel des Shell-Fensters.
- -¶
Liest und führt die Standardeingabe im Shell-Fenster aus. Diese Option muss die letzte sein, bevor beliebige Argumente folgen.
Wenn Argumente angegeben sind
Wenn
-,-coder-rverwendet wird, werden alle Argumente insys.argv[1:]platziert undsys.argv[0]wird entsprechend auf'','-c'oder'-r'gesetzt. Es wird kein Editorfenster geöffnet, auch wenn dies der Standard in der Optionen-Dialog ist.Andernfalls werden Argumente als zu öffnende Dateien für die Bearbeitung behandelt und
sys.argvspiegelt die an IDLE selbst übergebenen Argumente wider.
Startup-Fehler¶
IDLE verwendet einen Socket, um zwischen dem IDLE-GUI-Prozess und dem Benutzer-Code-Ausführungsprozess zu kommunizieren. Eine Verbindung muss jedes Mal hergestellt werden, wenn die Shell gestartet oder neu gestartet wird (Letzteres wird durch eine Trennlinie mit der Aufschrift „RESTART“ angezeigt). Wenn der Benutzerprozess keine Verbindung zum GUI-Prozess herstellen kann, wird normalerweise ein Tk-Fehlerfenster mit der Meldung „cannot connect“ angezeigt, das den Benutzer hierher leitet. Anschließend wird das Programm beendet.
Ein spezifischer Verbindungsfehler unter Unix-Systemen resultiert aus falsch konfigurierten Masquerading-Regeln irgendwo in der Netzwerkkonfiguration des Systems. Wenn IDLE von einem Terminal aus gestartet wird, sieht man eine Meldung, die mit ** Invalid host: beginnt. Der gültige Wert ist 127.0.0.1 (idlelib.rpc.LOCALHOST). Man kann dies mit tcpconnect -irv 127.0.0.1 6543 in einem Terminalfenster und tcplisten <gleiche Args> in einem anderen diagnostizieren.
Eine häufige Ursache für Fehler ist eine vom Benutzer erstellte Datei mit demselben Namen wie ein Standardbibliotheksmodul, z. B. random.py und tkinter.py. Wenn sich eine solche Datei im selben Verzeichnis befindet wie eine Datei, die gerade ausgeführt wird, kann IDLE die stdlib-Datei nicht importieren. Die aktuelle Lösung besteht darin, die Benutzerdatei umzubenennen.
Obwohl seltener als früher, kann ein Antiviren- oder Firewall-Programm die Verbindung unterbinden. Wenn das Programm nicht beigebracht werden kann, die Verbindung zuzulassen, muss es ausgeschaltet werden, damit IDLE funktioniert. Es ist sicher, diese interne Verbindung zuzulassen, da keine Daten auf externen Ports sichtbar sind. Ein ähnliches Problem ist eine Netzwerkkonfigurationsfehler, die Verbindungen blockiert.
Python-Installationsprobleme können gelegentlich IDLE stoppen: Mehrere Versionen können kollidieren oder eine einzelne Installation benötigt Administratorrechte. Wenn man den Konflikt auflöst oder nicht als Administrator ausführen kann oder will, ist es möglicherweise am einfachsten, Python vollständig zu entfernen und neu zu beginnen.
Ein Zombie-Prozess pythonw.exe könnte ein Problem darstellen. Unter Windows verwenden Sie den Task-Manager, um danach zu suchen und ihn zu beenden, falls vorhanden. Manchmal schlägt ein durch einen Programmabsturz oder eine Tastenkombination (Strg-C) initiierter Neustart möglicherweise fehl. Das Schließen des Fehlerfensters oder die Verwendung von „Shell neu starten“ im Shell-Menü kann ein vorübergehendes Problem beheben.
Wenn IDLE startet, versucht es, Benutzerkonfigurationsdateien in ~/.idlerc/ (~ ist das Home-Verzeichnis) zu lesen. Bei Problemen sollte eine Fehlermeldung angezeigt werden. Abgesehen von zufälligen Festplattenfehlern kann dies verhindert werden, indem man die Dateien niemals manuell bearbeitet. Verwenden Sie stattdessen den Konfigurationsdialog unter Optionen. Sobald ein Fehler in einer Benutzerkonfigurationsdatei vorliegt, kann die beste Lösung darin bestehen, diese zu löschen und mit dem Einstellungsdialog neu zu beginnen.
Wenn IDLE ohne Meldung beendet wird und nicht von einer Konsole aus gestartet wurde, versuchen Sie, es von einer Konsole oder einem Terminal aus zu starten (python -m idlelib) und prüfen Sie, ob dies zu einer Fehlermeldung führt.
Auf Unix-basierten Systemen mit Tcl/Tk älter als 8.6.11 (siehe About IDLE) können bestimmte Zeichen bestimmter Schriftarten einen Tk-Fehler mit einer Meldung an das Terminal verursachen. Dies kann passieren, wenn man IDLE startet, um eine Datei mit einem solchen Zeichen zu bearbeiten, oder später, wenn man ein solches Zeichen eingibt. Wenn man Tcl/Tk nicht aktualisieren kann, muss IDLE neu konfiguriert werden, um eine besser funktionierende Schriftart zu verwenden.
Ausführen von Benutzercode¶
Mit seltenen Ausnahmen ist das Ergebnis der Ausführung von Python-Code mit IDLE dasselbe wie die Ausführung desselben Codes mit der Standardmethode, direkt mit Python in einer Textmodus-Systemkonsole oder einem Terminalfenster. Die unterschiedliche Benutzeroberfläche und Bedienung beeinflussen jedoch gelegentlich sichtbare Ergebnisse. Zum Beispiel beginnt sys.modules mit mehr Einträgen und threading.active_count() gibt 2 statt 1 zurück.
Standardmäßig führt IDLE Benutzercode in einem separaten Betriebssystemprozess aus, anstatt im Benutzeroberflächenprozess, der die Shell und den Editor ausführt. Im Ausführungsprozess ersetzt er sys.stdin, sys.stdout und sys.stderr durch Objekte, die Eingaben von der Shell erhalten und Ausgaben an die Shell senden. Die ursprünglichen Werte in sys.__stdin__, sys.__stdout__ und sys.__stderr__ werden nicht berührt, können aber None sein.
Das Senden der Ausgabe von einem Prozess an ein Textwidget in einem anderen ist langsamer als das Drucken in ein Systemterminal im selben Prozess. Dies hat die größten Auswirkungen beim Drucken mehrerer Argumente, da der String für jedes Argument, jeder Trennzeichen und der Zeilenumbruch separat gesendet werden. Für die Entwicklung ist dies normalerweise kein Problem, aber wenn man schneller in IDLE ausgeben möchte, formatiert und verknüpft man alles, was man gemeinsam anzeigen möchte, und gibt dann einen einzelnen String aus. Sowohl Format-Strings als auch str.join() können helfen, Felder und Zeilen zu kombinieren.
Die Standard-Stream-Ersetzungen von IDLE werden nicht von Unterprozessen übernommen, die im Ausführungsprozess erstellt werden, sei es direkt durch Benutzercode oder durch Module wie multiprocessing. Wenn solche Unterprozesse input von sys.stdin oder print oder write an sys.stdout oder sys.stderr verwenden, sollte IDLE in einem Kommandozeilenfenster gestartet werden. (Unter Windows verwenden Sie python oder py anstelle von pythonw oder pyw.) Der sekundäre Unterprozess wird dann für die Ein- und Ausgabe an dieses Fenster angehängt.
Wenn sys durch Benutzercode zurückgesetzt wird, z. B. durch importlib.reload(sys), gehen die Änderungen von IDLE verloren und die Eingabe von der Tastatur und die Ausgabe auf dem Bildschirm funktionieren nicht mehr richtig.
Wenn die Shell den Fokus hat, kontrolliert sie Tastatur und Bildschirm. Dies ist normalerweise transparent, aber Funktionen, die direkt auf Tastatur und Bildschirm zugreifen, funktionieren nicht. Dazu gehören systemabhängige Funktionen, die feststellen, ob eine Taste gedrückt wurde und wenn ja, welche.
Der IDLE-Code, der im Ausführungsprozess läuft, fügt Frames zum Aufrufstapel hinzu, die sonst nicht vorhanden wären. IDLE umschließt sys.getrecursionlimit und sys.setrecursionlimit, um die Auswirkungen der zusätzlichen Stack-Frames zu reduzieren.
Wenn Benutzercode SystemExit auslöst, entweder direkt oder durch Aufruf von sys.exit, kehrt IDLE zu einem Shell-Prompt zurück, anstatt sich zu beenden.
Benutzerausgabe in der Shell¶
Wenn ein Programm Text ausgibt, wird das Ergebnis durch das entsprechende Ausgabegerät bestimmt. Wenn IDLE Benutzercode ausführt, werden sys.stdout und sys.stderr mit dem Anzeigebereich der IDLE-Shell verbunden. Einige seiner Funktionen werden vom zugrunde liegenden Tk Text-Widget geerbt. Andere sind programmierte Ergänzungen. Wo es darauf ankommt, ist die Shell für die Entwicklung und nicht für Produktionsläufe konzipiert.
Zum Beispiel verwirft die Shell nie Ausgaben. Ein Programm, das unbegrenzte Ausgaben an die Shell sendet, wird schließlich den Speicher füllen, was zu einem Speicherfehler führt. Im Gegensatz dazu behalten einige Systemtextfenster nur die letzten n Zeilen der Ausgabe. Eine Windows-Konsole behält beispielsweise eine benutzerdefinierbare Anzahl von 1 bis 9999 Zeilen, wobei 300 der Standard ist.
Ein Tk Text-Widget und damit die IDLE-Shell zeigen Zeichen (Codepoints) aus der BMP (Basic Multilingual Plane) Teilmenge von Unicode an. Welche Zeichen mit einer ordnungsgemäßen Glyphe und welche mit einem Ersatzfeld angezeigt werden, hängt vom Betriebssystem und den installierten Schriftarten ab. Tabulatoren bewirken, dass der folgende Text nach dem nächsten Tabstopp beginnt. (Sie treten alle 8 „Zeichen“ auf.) Zeilenumbruchzeichen bewirken, dass der folgende Text in einer neuen Zeile erscheint. Andere Steuerzeichen werden ignoriert oder als Leerzeichen, Box oder etwas anderes angezeigt, je nach Betriebssystem und Schriftart. (Das Bewegen des Textcursors durch eine solche Ausgabe mit den Pfeiltasten kann zu überraschenden Abstandseffekten führen.)
>>> s = 'a\tb\a<\x02><\r>\bc\nd' # Enter 22 chars.
>>> len(s)
14
>>> s # Display repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='') # Display s as is.
# Result varies by OS and font. Try it.
Die Funktion repr wird für die interaktive Anzeige von Ausdruckswerten verwendet. Sie gibt eine veränderte Version des Eingabestrings zurück, in der Steuerzeichen, einige BMP-Codepoints und alle Nicht-BMP-Codepoints durch Escape-Codes ersetzt werden. Wie oben gezeigt, ermöglicht sie es, die Zeichen in einem String zu identifizieren, unabhängig davon, wie sie angezeigt werden.
Normale und Fehler-Ausgaben werden im Allgemeinen getrennt (auf separaten Zeilen) von Codeeingaben und voneinander gehalten. Sie erhalten jeweils unterschiedliche Hervorhebungsfarben.
Für SyntaxError-Tracebacks wird das normale „^“-Zeichen, das die Stelle markiert, an der der Fehler erkannt wurde, durch Einfärben des Textes mit einer Fehlerhervorhebung ersetzt. Wenn Code, der aus einer Datei ausgeführt wird, andere Ausnahmen verursacht, kann man mit der rechten Maustaste auf eine Traceback-Zeile klicken, um zur entsprechenden Zeile in einem IDLE-Editor zu springen. Die Datei wird bei Bedarf geöffnet.
Die Shell verfügt über eine spezielle Einrichtung zum Zusammenpressen von Ausgabzeilen zu einem „Squeezed text“-Label. Dies geschieht automatisch für Ausgaben über N Zeilen (N = 50 standardmäßig). N kann im Abschnitt PyShell der Registerkarte Allgemein im Einstellungsdialog geändert werden. Ausgaben mit weniger Zeilen können durch Klicken mit der rechten Maustaste auf die Ausgabe zusammengepresst werden. Dies kann nützlich sein für Zeilen, die lang genug sind, um das Scrollen zu verlangsamen.
Zusammengepresste Ausgabe wird durch Doppelklick auf das Label direkt erweitert. Sie kann auch durch Rechtsklick auf das Label in die Zwischenablage oder ein separates Ansichtsfenster gesendet werden.
Entwicklung von Tkinter-Anwendungen¶
IDLE unterscheidet sich absichtlich von Standard-Python, um die Entwicklung von Tkinter-Programmen zu erleichtern. Geben Sie import tkinter as tk; root = tk.Tk() in Standard-Python ein, und nichts erscheint. Geben Sie dasselbe in IDLE ein, und ein Tk-Fenster erscheint. In Standard-Python müssen Sie auch root.update() eingeben, um das Fenster zu sehen. IDLE erledigt das Äquivalent im Hintergrund, etwa 20 Mal pro Sekunde, was etwa alle 50 Millisekunden ist. Geben Sie dann b = tk.Button(root, text='button'); b.pack() ein. Wiederum ändert sich in Standard-Python nichts Sichtbares, bis man root.update() eingibt.
Die meisten Tkinter-Programme führen root.mainloop() aus, das normalerweise nicht zurückkehrt, bis die Tk-App zerstört ist. Wenn das Programm mit python -i oder aus einem IDLE-Editor ausgeführt wird, erscheint ein >>> Shell-Prompt erst, wenn mainloop() zurückkehrt, zu welchem Zeitpunkt nichts mehr zur Interaktion übrig ist.
Beim Ausführen eines Tkinter-Programms aus einem IDLE-Editor kann man den Aufruf von mainloop auskommentieren. Man erhält dann sofort einen Shell-Prompt und kann mit der laufenden Anwendung interagieren. Man muss sich nur daran erinnern, den mainloop-Aufruf wieder zu aktivieren, wenn man in Standard-Python ausführt.
Ausführen ohne Subprozess¶
Standardmäßig führt IDLE Benutzercode in einem separaten Subprozess über einen Socket aus, der die interne Loopback-Schnittstelle verwendet. Diese Verbindung ist nicht extern sichtbar und es werden keine Daten über das Internet gesendet oder empfangen. Wenn Firewall-Software sich trotzdem beschwert, können Sie diese ignorieren.
Wenn der Versuch, die Socket-Verbindung herzustellen, fehlschlägt, wird Idle Sie benachrichtigen. Solche Fehler sind manchmal transient, aber wenn sie hartnäckig sind, kann das Problem entweder eine Firewall sein, die die Verbindung blockiert, oder eine Fehlkonfiguration eines bestimmten Systems. Bis das Problem behoben ist, können Sie Idle mit dem Schalter -n in der Befehlszeile ausführen.
Wenn IDLE mit dem Schalter -n gestartet wird, läuft es in einem einzigen Prozess und erstellt nicht den Subprozess, der den RPC-Python-Ausführungsserver ausführt. Dies kann nützlich sein, wenn Python den Subprozess oder die RPC-Socket-Schnittstelle auf Ihrer Plattform nicht erstellen kann. In diesem Modus ist der Benutzercode jedoch nicht von IDLE selbst isoliert. Außerdem wird die Umgebung nicht neu gestartet, wenn Run/Run Module (F5) ausgewählt wird. Wenn Ihr Code geändert wurde, müssen Sie die betroffenen Module reload() und alle spezifischen Elemente neu importieren (z. B. from foo import baz), damit die Änderungen wirksam werden. Aus diesen Gründen ist es vorzuziehen, IDLE, wenn möglich, mit dem Standard-Subprozess auszuführen.
Veraltet seit Version 3.4.
Hilfe und Einstellungen¶
Hilfequellen¶
Der Menüeintrag „IDLE Help“ im Hilfe-Menü zeigt eine formatierte HTML-Version des IDLE-Kapitels des Library Reference an. Das Ergebnis in einem schreibgeschützten Tkinter-Textfenster kommt dem, was man in einem Webbrowser sieht, sehr nahe. Navigieren Sie durch den Text mit einem Mausrad, der Bildlaufleiste oder den gedrückten Pfeiltasten nach oben und unten. Oder klicken Sie auf die Schaltfläche TOC (Inhaltsverzeichnis) und wählen Sie einen Abschnittstitel in der geöffneten Box aus.
Der Menüeintrag „Python Docs“ im Hilfe-Menü öffnet die umfangreichen Hilfsquellen, einschließlich Tutorials, die unter docs.python.org/x.y verfügbar sind, wobei „x.y“ die aktuell laufende Python-Version ist. Wenn Ihr System eine Offline-Kopie der Dokumentation hat (dies kann eine Installationsoption sein), wird diese stattdessen geöffnet.
Ausgewählte URLs können jederzeit über den Reiter Allgemein im Dialog „IDLE konfigurieren“ zum Hilfe-Menü hinzugefügt oder daraus entfernt werden.
Einstellungen vornehmen¶
Die Schriftarteinstellungen, Hervorhebungen, Tasten und allgemeinen Einstellungen können über „IDLE konfigurieren“ im Optionsmenü geändert werden. Nicht standardmäßige Benutzereinstellungen werden in einem Verzeichnis .idlerc im Home-Verzeichnis des Benutzers gespeichert. Probleme, die durch fehlerhafte Benutzerkonfigurationsdateien verursacht werden, werden durch Bearbeiten oder Löschen einer oder mehrerer Dateien in .idlerc behoben.
Auf der Registerkarte Schriftart sehen Sie im Textbeispiel die Auswirkung von Schriftart und -größe auf mehrere Zeichen in mehreren Sprachen. Bearbeiten Sie das Beispiel, um weitere Zeichen von persönlichem Interesse hinzuzufügen. Verwenden Sie das Beispiel, um Monospace-Schriftarten auszuwählen. Wenn bestimmte Zeichen in der Shell oder einem Editor Probleme bereiten, fügen Sie sie oben in das Beispiel ein und versuchen Sie, zuerst die Größe und dann die Schriftart zu ändern.
Auf den Registerkarten Hervorhebungen und Tasten wählen Sie ein integriertes oder benutzerdefiniertes Farbschema und eine Tastenbelegung aus. Um ein neueres integriertes Farbschema oder eine neuere Tastenbelegung mit älteren IDLEs zu verwenden, speichern Sie es als neues benutzerdefiniertes Schema oder neue benutzerdefinierte Tastenbelegung, und es wird für ältere IDLEs zugänglich sein.
IDLE unter macOS¶
Unter Systemeinstellungen: Dock können Sie „Bevorzugen Sie Registerkarten beim Öffnen von Dokumenten“ auf „Immer“ setzen. Diese Einstellung ist nicht kompatibel mit dem von IDLE verwendeten Tk/Tkinter-GUI-Framework und bricht einige IDLE-Funktionen.
Erweiterungen¶
IDLE enthält eine Erweiterungsfunktion. Einstellungen für Erweiterungen können über den Reiter Erweiterungen im Einstellungsdialog geändert werden. Weitere Informationen finden Sie am Anfang von config-extensions.def im Verzeichnis idlelib. Die einzige aktuelle Standarderweiterung ist zzdummy, ein Beispiel, das auch zum Testen verwendet wird.
idlelib — Implementierung der IDLE-Anwendung¶
Quellcode: Lib/idlelib
Das Paket Lib/idlelib implementiert die IDLE-Anwendung. Weitere Informationen zur Verwendung von IDLE finden Sie auf der restlichen Seite.
Die Dateien in idlelib sind in idlelib/README.txt beschrieben. Greifen Sie darauf entweder in idlelib zu oder klicken Sie auf Hilfe => Über IDLE im IDLE-Menü. Diese Datei ordnet auch IDLE-Menüeinträge dem Code zu, der den Eintrag implementiert. Mit Ausnahme der unter „Startup“ aufgeführten Dateien ist der idlelib-Code „privat“ in dem Sinne, dass Funktionsänderungen zurückportiert werden können (siehe PEP 434).