1. Befehlszeile und Umgebung

Der CPython-Interpreter durchsucht die Befehlszeile und die Umgebung nach verschiedenen Einstellungen.

CPython-Implementierungsdetail: Die Befehlszeilen-Schemata anderer Umsetzungen können davon abweichen. Weitere Quellen stehen unter Alternative Implementierungen.

1.1. Befehlszeile

Beim Aufruf von Python kannst du jede dieser Optionen angeben:

python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]

Der häufigste Fall ist natürlich der einfache Aufruf eines Skripts:

python myscript.py

1.1.1. Optionen der Schnittstelle

Die Schnittstelle des Interpreters ähnelt der der UNIX-Shell, bietet aber einige zusätzliche Aufrufarten:

  • When called with standard input connected to a tty device, it prompts for commands and executes them until an EOF (an end-of-file character, you can produce that with Ctrl-D on UNIX or Ctrl-Z, Enter on Windows) is read.

  • Wird er mit einem Dateinamen als Argument oder mit einer Datei als Standardeingabe aufgerufen, liest und führt er ein Skript aus dieser Datei aus.

  • Wird er mit einem Verzeichnisnamen als Argument aufgerufen, liest und führt er ein passend benanntes Skript aus diesem Verzeichnis aus.

  • Wird er mit -c command aufgerufen, führt er die als command angegebenen Python-Anweisungen aus. command darf dabei mehrere, durch Zeilenumbrüche getrennte Anweisungen enthalten. Führende Leerzeichen sind in Python-Anweisungen bedeutsam!

  • When called with -m module-name, the given module is located on the Python module path and executed as a script.

Im nicht interaktiven Modus wird die ganze Eingabe geparst, bevor sie ausgeführt wird.

Eine Schnittstellenoption beendet die Liste der Optionen, die der Interpreter verbraucht. Alle folgenden Argumente landen in sys.argv — beachte, dass das erste Element, der Index null (sys.argv[0]), eine Zeichenkette ist, die die Herkunft des Programms widerspiegelt.

-c <command>

Führt den Python-Code in command aus. command kann eine oder mehrere durch Zeilenumbrüche getrennte Anweisungen sein, wobei führende Leerzeichen wie in gewöhnlichem Modulcode bedeutsam sind.

Ist diese Option angegeben, ist das erste Element von sys.argv gleich "-c", und das aktuelle Verzeichnis wird an den Anfang von sys.path gestellt (sodass Module aus diesem Verzeichnis als Module der obersten Ebene importiert werden können).

Löst ein Auditing-Ereignis cpython.run_command mit dem Argument command aus.

-m <module-name>

Search sys.path for the named module and execute its contents as the __main__ module.

Da das Argument der Name eines Moduls ist, darfst du keine Dateiendung angeben (.py). Der Modulname sollte ein gültiger absoluter Python-Modulname sein, die Umsetzung erzwingt das aber nicht immer (sie erlaubt dir zum Beispiel möglicherweise einen Namen mit Bindestrich).

Paketnamen (einschließlich Namespace-Pakete) sind ebenfalls erlaubt. Wird anstelle eines gewöhnlichen Moduls ein Paketname angegeben, führt der Interpreter <pkg>.__main__ als Hauptmodul aus. Dieses Verhalten ist absichtlich dem Umgang mit Verzeichnissen und ZIP-Dateien nachempfunden, die dem Interpreter als Skriptargument übergeben werden.

Bemerkung

Diese Option lässt sich nicht mit integrierten Modulen und mit in C geschriebenen Erweiterungsmodulen verwenden, weil diese keine Python-Moduldateien haben. Für vorkompilierte Module lässt sie sich dagegen verwenden, auch wenn die ursprüngliche Quelldatei nicht vorliegt.

Ist diese Option angegeben, ist das erste Element von sys.argv der vollständige Pfad zur Moduldatei (während die Moduldatei gesucht wird, ist das erste Element auf "-m" gesetzt). Wie bei der Option -c wird das aktuelle Verzeichnis an den Anfang von sys.path gestellt.

Mit der Option -I lässt sich das Skript im abgeschotteten Modus ausführen, in dem sys.path weder das aktuelle Verzeichnis noch das site-packages-Verzeichnis des Benutzers enthält. Alle Umgebungsvariablen PYTHON* werden dabei ebenfalls ignoriert.

Viele Module der Standardbibliothek enthalten Code, der bei ihrer Ausführung als Skript aufgerufen wird. Ein Beispiel ist das Modul timeit:

python -m timeit -s 'setup here' 'benchmarked code here'
python -m timeit -h # for details

Löst ein Auditing-Ereignis cpython.run_module mit dem Argument module-name aus.

Siehe auch

runpy.run_module()

Gleichwertige Funktionalität, die Python-Code direkt zur Verfügung steht

PEP 338 – Executing modules as scripts

Geändert in Version 3.1: Gib den Paketnamen an, um ein Untermodul __main__ auszuführen.

Geändert in Version 3.4: Namespace-Pakete werden ebenfalls unterstützt

-

Liest Befehle von der Standardeingabe (sys.stdin). Ist die Standardeingabe ein Terminal, gilt -i implizit.

Ist diese Option angegeben, ist das erste Element von sys.argv gleich "-", und das aktuelle Verzeichnis wird an den Anfang von sys.path gestellt.

Löst ein Auditing-Ereignis cpython.run_stdin ohne Argumente aus.

<script>

Führt den Python-Code in script aus. script muss ein Pfad im Dateisystem sein (absolut oder relativ), der entweder auf eine Python-Datei, auf ein Verzeichnis mit einer Datei __main__.py oder auf eine ZIP-Datei mit einer Datei __main__.py verweist.

Ist diese Option angegeben, ist das erste Element von sys.argv der Skriptname, wie er auf der Befehlszeile angegeben wurde.

Verweist der Skriptname direkt auf eine Python-Datei, wird das Verzeichnis dieser Datei an den Anfang von sys.path gestellt und die Datei als Modul __main__ ausgeführt.

Verweist der Skriptname auf ein Verzeichnis oder eine ZIP-Datei, wird der Skriptname an den Anfang von sys.path gestellt und die Datei __main__.py an diesem Ort als Modul __main__ ausgeführt.

Mit der Option -I lässt sich das Skript im abgeschotteten Modus ausführen, in dem sys.path weder das Verzeichnis des Skripts noch das site-packages-Verzeichnis des Benutzers enthält. Alle Umgebungsvariablen PYTHON* werden dabei ebenfalls ignoriert.

Löst ein Auditing-Ereignis cpython.run_file mit dem Argument filename aus.

Siehe auch

runpy.run_path()

Gleichwertige Funktionalität, die Python-Code direkt zur Verfügung steht

Ist keine Schnittstellenoption angegeben, gilt -i implizit, sys.argv[0] ist eine leere Zeichenkette (""), und das aktuelle Verzeichnis wird an den Anfang von sys.path gestellt. Außerdem sind Tabulator-Vervollständigung und das Bearbeiten der Eingabehistorie automatisch eingeschaltet, sofern auf deiner Plattform verfügbar (siehe Readline configuration).

Geändert in Version 3.4: Automatisches Einschalten von Tabulator-Vervollständigung und Historienbearbeitung.

1.1.2. Allgemeine Optionen

-?
-h
--help

Gibt eine kurze Beschreibung aller Befehlszeilenoptionen und der zugehörigen Umgebungsvariablen aus und beendet sich.

--help-env

Gibt eine kurze Beschreibung der Python-spezifischen Umgebungsvariablen aus und beendet sich.

Neu in Version 3.11.

--help-xoptions

Gibt eine Beschreibung der umsetzungsspezifischen -X-Optionen aus und beendet sich.

Neu in Version 3.11.

--help-all

Gibt die vollständigen Verwendungshinweise aus und beendet sich.

Neu in Version 3.11.

-V
--version

Gibt die Python-Versionsnummer aus und beendet sich. Eine Ausgabe könnte so aussehen:

Python 3.8.0b2+

Zweimal angegeben, gibt sie mehr über den Build aus, etwa:

Python 3.8.0b2+ (3.8:0c076caaa8, Apr 20 2019, 21:55:00)
[GCC 6.2.0 20161005]

Neu in Version 3.6: Die Option -VV.

1.1.3. Verschiedene Optionen

-b

Gibt eine Warnung aus, wenn bytes oder bytearray ohne Angabe einer Kodierung in str umgewandelt wird oder wenn bytes beziehungsweise bytearray mit str oder bytes mit int verglichen wird. Gibt einen Fehler aus, wenn die Option zweimal angegeben wird (-bb).

Geändert in Version 3.5: Betrifft auch Vergleiche von bytes mit int.

-B

Ist sie angegeben, versucht Python nicht, beim Import von Quellmodulen .pyc-Dateien zu schreiben. Siehe auch PYTHONDONTWRITEBYTECODE.

--check-hash-based-pycs default|always|never

Steuert das Prüfverhalten für hashbasierte .pyc-Dateien. Siehe Ungültigmachung von zwischengespeichertem Bytecode. Bei default werden geprüfte und ungeprüfte hashbasierte Bytecode-Cache-Dateien nach ihrer jeweiligen Standardbedeutung validiert. Bei always werden alle hashbasierten .pyc-Dateien gegen ihre zugehörige Quelldatei validiert, gleich ob geprüft oder ungeprüft. Bei never werden hashbasierte .pyc-Dateien nicht gegen ihre zugehörigen Quelldateien validiert.

Die Bedeutung zeitstempelbasierter .pyc-Dateien bleibt von dieser Option unberührt.

-d

Turn on parser debugging output (for expert only, depending on compilation options). See also PYTHONDEBUG.

-E

Ignoriert alle gesetzten Umgebungsvariablen PYTHON*, etwa PYTHONPATH und PYTHONHOME.

Siehe auch die Optionen -P und -I (abgeschottet).

-i

When a script is passed as first argument or the -c option is used, enter interactive mode after executing the script or the command, even when sys.stdin does not appear to be a terminal. The PYTHONSTARTUP file is not read.

Das kann nützlich sein, um globale Variablen oder einen Stack-Trace zu untersuchen, wenn ein Skript eine Ausnahme auslöst. Siehe auch PYTHONINSPECT.

-I

Führt Python im abgeschotteten Modus aus. Das zieht auch die Optionen -E, -P und -s nach sich.

Im abgeschotteten Modus enthält sys.path weder das Verzeichnis des Skripts noch das site-packages-Verzeichnis des Benutzers. Alle Umgebungsvariablen PYTHON* werden ebenfalls ignoriert. Weitere Einschränkungen können hinzukommen, um das Einschleusen von Schadcode durch den Benutzer zu verhindern.

Neu in Version 3.4.

-O

Entfernt assert-Anweisungen und jeden Code, der vom Wert von __debug__ abhängt. Ergänzt den Dateinamen kompilierter Dateien (Bytecode) um .opt-1 vor der Endung .pyc (siehe PEP 488). Siehe auch PYTHONOPTIMIZE.

Geändert in Version 3.5: Die .pyc-Dateinamen werden gemäß PEP 488 geändert.

-OO

Wirkt wie -O und verwirft zusätzlich Docstrings. Ergänzt den Dateinamen kompilierter Dateien (Bytecode) um .opt-2 vor der Endung .pyc (siehe PEP 488).

Geändert in Version 3.5: Die .pyc-Dateinamen werden gemäß PEP 488 geändert.

-P

Stellt keinen möglicherweise unsicheren Pfad an den Anfang von sys.path:

  • Befehlszeile python -m module: Das aktuelle Arbeitsverzeichnis wird nicht vorangestellt.

  • Befehlszeile python script.py: Das Verzeichnis des Skripts wird nicht vorangestellt. Ist es eine symbolische Verknüpfung, werden symbolische Verknüpfungen aufgelöst.

  • Befehlszeilen python -c code und python (REPL): Es wird keine leere Zeichenkette vorangestellt, die für das aktuelle Arbeitsverzeichnis steht.

Siehe auch die Umgebungsvariable PYTHONSAFEPATH sowie die Optionen -E und -I (abgeschottet).

Neu in Version 3.11.

-q

Zeigt die Copyright- und Versionsmeldungen auch im interaktiven Modus nicht an.

Neu in Version 3.2.

-R

Turn on hash randomization. This option only has an effect if the PYTHONHASHSEED environment variable is set to 0, since hash randomization is enabled by default.

In früheren Python-Versionen schaltet diese Option die Hash-Randomisierung ein, sodass die __hash__()-Werte von str- und bytes-Objekten mit einem unvorhersehbaren Zufallswert „gesalzen“ werden. Innerhalb eines einzelnen Python-Prozesses bleiben sie zwar konstant, über wiederholte Python-Aufrufe hinweg sind sie jedoch nicht vorhersehbar.

Hash randomization is intended to provide protection against a denial-of-service caused by carefully chosen inputs that exploit the worst case performance of a dict construction, O(n2) complexity. See http://ocert.org/advisories/ocert-2011-003.html for details.

Mit PYTHONHASHSEED kannst du einen festen Wert für das Hash-Seed-Geheimnis setzen.

Neu in Version 3.2.3.

Geändert in Version 3.7: Die Option wird nicht mehr ignoriert.

-s

Fügt das site-packages-Verzeichnis des Benutzers nicht zu sys.path hinzu.

Siehe auch PYTHONNOUSERSITE.

Siehe auch

PEP 370 – site-packages-Verzeichnis pro Benutzer

-S

Schaltet den Import des Moduls site und die damit verbundenen site-abhängigen Änderungen an sys.path ab. Diese Änderungen bleiben auch dann abgeschaltet, wenn site später ausdrücklich importiert wird (rufe site.main() auf, wenn du sie auslösen willst).

-u

Erzwingt, dass die Ströme stdout und stderr ungepuffert sind. Auf den Strom stdin hat diese Option keine Wirkung.

Siehe auch PYTHONUNBUFFERED.

Geändert in Version 3.7: Die Textschicht der Ströme stdout und stderr ist jetzt ungepuffert.

-v

Gibt bei jeder Initialisierung eines Moduls eine Meldung aus, die den Ort nennt (Dateiname oder integriertes Modul), von dem es geladen wird. Zweimal angegeben (-vv), gibt sie für jede Datei eine Meldung aus, die bei der Suche nach einem Modul geprüft wird. Außerdem liefert sie Informationen zum Aufräumen der Module beim Beenden.

Geändert in Version 3.10: Das Modul site meldet die site-spezifischen Pfade und die verarbeiteten .pth-Dateien.

Siehe auch PYTHONVERBOSE.

-W arg

Steuerung der Warnungen. Die Warnmaschinerie von Python gibt Warnmeldungen standardmäßig auf sys.stderr aus.

Die einfachsten Einstellungen wenden eine bestimmte Aktion bedingungslos auf alle Warnungen an, die ein Prozess ausgibt (auch auf die, die sonst standardmäßig ignoriert werden):

-Wdefault  # Warn once per call location
-Werror    # Convert to exceptions
-Walways   # Warn every time
-Wmodule   # Warn once per calling module
-Wonce     # Warn once per Python process
-Wignore   # Never warn

Die Aktionsnamen lassen sich beliebig abkürzen, der Interpreter löst sie zum passenden Aktionsnamen auf. So ist -Wi dasselbe wie -Wignore.

Die vollständige Form des Arguments lautet:

action:message:category:module:lineno

Leere Felder passen auf alle Werte, nachgestellte leere Felder dürfen weggelassen werden. So ignoriert -W ignore::DeprecationWarning alle DeprecationWarning-Warnungen.

Das Feld action wirkt wie oben beschrieben, gilt aber nur für Warnungen, die auf die übrigen Felder passen.

Das Feld message muss auf die gesamte Warnmeldung passen, wobei Groß- und Kleinschreibung keine Rolle spielt.

Das Feld category passt auf die Warnkategorie (z. B. DeprecationWarning). Dabei muss es sich um einen Klassennamen handeln. Geprüft wird, ob die tatsächliche Warnkategorie der Meldung eine Unterklasse der angegebenen Warnkategorie ist.

Das Feld module passt auf den (vollständig qualifizierten) Modulnamen, wobei Groß- und Kleinschreibung hier eine Rolle spielt.

Das Feld lineno passt auf die Zeilennummer, wobei null auf alle Zeilennummern passt und damit einer weggelassenen Zeilennummer entspricht.

Es können mehrere Optionen -W angegeben werden. Passt eine Warnung auf mehr als eine Option, wird die Aktion der letzten passenden Option ausgeführt. Ungültige Optionen -W werden ignoriert (allerdings wird beim Ausgeben der ersten Warnung eine Meldung über ungültige Optionen ausgegeben).

Warnungen lassen sich auch über die Umgebungsvariable PYTHONWARNINGS und innerhalb eines Python-Programms über das Modul warnings steuern. Mit der Funktion warnings.filterwarnings() kannst du zum Beispiel einen regulären Ausdruck auf die Warnmeldung anwenden.

Weitere Einzelheiten unter The Warnings Filter und Describing Warning Filters.

-x

Skip the first line of the source, allowing use of non-Unix forms of #!cmd. This is intended for a DOS specific hack only.

-X

Für verschiedene umsetzungsspezifische Optionen reserviert. CPython definiert derzeit die folgenden möglichen Werte:

  • -X faulthandler schaltet faulthandler ein. Siehe auch PYTHONFAULTHANDLER.

  • -X showrefcount gibt die Gesamtzahl der Referenzen und die Anzahl der belegten Speicherblöcke aus, wenn das Programm endet oder nach jeder Anweisung im interaktiven Interpreter. Das funktioniert nur bei Debug-Builds.

  • -X tracemalloc beginnt damit, Python-Speicheranforderungen über das Modul tracemalloc mitzuschreiben. Standardmäßig wird im Traceback einer Aufzeichnung nur der jüngste Frame gespeichert. Mit -X tracemalloc=NFRAME beginnt das Mitschreiben mit einer Traceback-Grenze von NFRAME Frames. Mehr dazu unter tracemalloc.start() und PYTHONTRACEMALLOC.

  • -X int_max_str_digits stellt die Längenbegrenzung bei der Umwandlung zwischen Ganzzahl und Zeichenkette ein. Siehe auch PYTHONINTMAXSTRDIGITS.

  • -X importtime to show how long each import takes. It shows module name, cumulative time (including nested imports) and self time (excluding nested imports). Note that its output may be broken in multi-threaded application. Typical usage is python3 -X importtime -c 'import asyncio'. See also PYTHONPROFILEIMPORTTIME.

  • -X dev: schaltet den Python-Entwicklungsmodus ein, der zusätzliche Prüfungen zur Laufzeit einführt, die zu aufwendig sind, um standardmäßig eingeschaltet zu sein. Siehe auch PYTHONDEVMODE.

  • -X utf8 schaltet den Python-UTF-8-Modus ein. -X utf8=0 schaltet den Python-UTF-8-Modus ausdrücklich ab (auch wenn er sich sonst automatisch einschalten würde). Siehe auch PYTHONUTF8.

  • -X pycache_prefix=PATH schreibt .pyc-Dateien in einen parallelen Baum unterhalb des angegebenen Verzeichnisses anstatt in den Codebaum. Siehe auch PYTHONPYCACHEPREFIX.

  • -X warn_default_encoding löst eine EncodingWarning aus, wenn beim Öffnen von Dateien die vom Gebietsschema abhängige Standardkodierung verwendet wird. Siehe auch PYTHONWARNDEFAULTENCODING.

  • -X no_debug_ranges schaltet das Mitführen der Tabellen ab, die jedem Befehl in Codeobjekten zusätzliche Ortsangaben zuordnen (Endzeile, Startspalte und Endspalte). Das ist nützlich, wenn kleinere Codeobjekte und pyc-Dateien gewünscht sind und wenn die zusätzlichen sichtbaren Ortsmarkierungen unterdrückt werden sollen, mit denen der Interpreter Tracebacks anzeigt. Siehe auch PYTHONNODEBUGRANGES.

  • -X frozen_modules determines whether or not frozen modules are ignored by the import machinery. A value of „on“ means they get imported and „off“ means they are ignored. The default is „on“ if this is an installed Python (the normal case). If it’s under development (running from the source tree) then the default is „off“. Note that the „importlib_bootstrap“ and „importlib_bootstrap_external“ frozen modules are always used, even if this flag is set to „off“.

Außerdem lassen sich damit beliebige Werte übergeben und über das Wörterbuch sys._xoptions abrufen.

Neu in Version 3.2.

Geändert in Version 3.3: Added the -X faulthandler option.

Geändert in Version 3.4: Added the -X showrefcount and -X tracemalloc options.

Geändert in Version 3.6: Added the -X showalloccount option.

Geändert in Version 3.7: Added the -X importtime, -X dev and -X utf8 options.

Geändert in Version 3.8: Added the -X pycache_prefix option. The -X dev option now logs close() exceptions in io.IOBase destructor.

Geändert in Version 3.9: Using -X dev option, check encoding and errors arguments on string encoding and decoding operations.

The -X showalloccount option has been removed.

Geändert in Version 3.10: Added the -X warn_default_encoding option. Removed the -X oldparser option.

Geändert in Version 3.11: Added the -X no_debug_ranges, -X frozen_modules and -X int_max_str_digits options.

1.1.4. Options you shouldn’t use

-J

Reserved for use by Jython.

1.2. Umgebungsvariablen

Diese Umgebungsvariablen beeinflussen das Verhalten von Python. Verarbeitet werden sie vor den Befehlszeilenschaltern, mit Ausnahme von -E und -I. Üblicherweise haben Befehlszeilenschalter bei einem Widerspruch Vorrang vor Umgebungsvariablen.

PYTHONHOME

Ändert den Ort der Standard-Python-Bibliotheken. Standardmäßig werden die Bibliotheken in prefix/lib/pythonversion und exec_prefix/lib/pythonversion gesucht, wobei prefix und exec_prefix installationsabhängige Verzeichnisse sind, die beide standardmäßig /usr/local lauten.

Ist PYTHONHOME auf ein einzelnes Verzeichnis gesetzt, ersetzt dieser Wert sowohl prefix als auch exec_prefix. Um dafür unterschiedliche Werte anzugeben, setze PYTHONHOME auf prefix:exec_prefix.

PYTHONPATH

Erweitert den Standardsuchpfad für Moduldateien. Das Format entspricht dem von PATH in der Shell: ein oder mehrere Verzeichnispfade, getrennt durch os.pathsep (also Doppelpunkte unter Unix oder Semikolons unter Windows). Nicht vorhandene Verzeichnisse werden stillschweigend ignoriert.

Neben gewöhnlichen Verzeichnissen dürfen einzelne Einträge in PYTHONPATH auch auf ZIP-Dateien verweisen, die reine Python-Module enthalten (im Quelltext oder kompiliert). Erweiterungsmodule lassen sich nicht aus ZIP-Dateien importieren.

Der Standardsuchpfad ist installationsabhängig, beginnt aber in der Regel mit prefix/lib/pythonversion (siehe PYTHONHOME oben). Er wird immer an PYTHONPATH angehängt.

Ein zusätzliches Verzeichnis wird, wie oben unter Optionen der Schnittstelle beschrieben, im Suchpfad vor PYTHONPATH eingefügt. Der Suchpfad lässt sich innerhalb eines Python-Programms über die Variable sys.path verändern.

PYTHONSAFEPATH

Ist sie auf eine nicht leere Zeichenkette gesetzt, wird kein möglicherweise unsicherer Pfad an den Anfang von sys.path gestellt. Einzelheiten dazu unter der Option -P.

Neu in Version 3.11.

PYTHONPLATLIBDIR

Ist sie auf eine nicht leere Zeichenkette gesetzt, überschreibt sie den Wert von sys.platlibdir.

Neu in Version 3.9.

PYTHONSTARTUP

Ist das der Name einer lesbaren Datei, werden die Python-Befehle in dieser Datei ausgeführt, bevor im interaktiven Modus die erste Eingabeaufforderung erscheint. Die Datei wird im selben Namensraum ausgeführt, in dem auch die interaktiven Befehle ausgeführt werden, sodass darin definierte oder importierte Objekte in der interaktiven Sitzung ohne Qualifizierung verwendet werden können. Du kannst in dieser Datei auch die Eingabeaufforderungen sys.ps1 und sys.ps2 sowie den Hook sys.__interactivehook__ ändern.

Löst beim Aufruf während des Starts ein Auditing-Ereignis cpython.run_startup mit dem Dateinamen als Argument aus.

PYTHONOPTIMIZE

Ist sie auf eine nicht leere Zeichenkette gesetzt, entspricht das der Angabe der Option -O. Ist sie auf eine Ganzzahl gesetzt, entspricht das der mehrfachen Angabe von -O.

PYTHONBREAKPOINT

Ist sie gesetzt, benennt sie ein aufrufbares Objekt in Punktschreibweise. Das Modul, das dieses Objekt enthält, wird importiert, und anschließend wird das Objekt von der Standardumsetzung von sys.breakpointhook() ausgeführt, die selbst von der integrierten Funktion breakpoint() aufgerufen wird. Ist sie nicht gesetzt oder auf die leere Zeichenkette gesetzt, entspricht das dem Wert „pdb.set_trace“. Setzt du sie auf die Zeichenkette „0“, tut die Standardumsetzung von sys.breakpointhook() nichts, sondern kehrt sofort zurück.

Neu in Version 3.7.

PYTHONDEBUG

Ist sie auf eine nicht leere Zeichenkette gesetzt, entspricht das der Angabe der Option -d. Ist sie auf eine Ganzzahl gesetzt, entspricht das der mehrfachen Angabe von -d.

PYTHONINSPECT

Ist sie auf eine nicht leere Zeichenkette gesetzt, entspricht das der Angabe der Option -i.

Diese Variable lässt sich auch von Python-Code über os.environ verändern, um beim Programmende den Inspect-Modus zu erzwingen.

Löst ein Auditing-Ereignis cpython.run_stdin ohne Argumente aus.

Geändert in Version 3.11.10: (also 3.10.15, 3.9.20, and 3.8.20) Emits audit events.

PYTHONUNBUFFERED

Ist sie auf eine nicht leere Zeichenkette gesetzt, entspricht das der Angabe der Option -u.

PYTHONVERBOSE

Ist sie auf eine nicht leere Zeichenkette gesetzt, entspricht das der Angabe der Option -v. Ist sie auf eine Ganzzahl gesetzt, entspricht das der mehrfachen Angabe von -v.

PYTHONCASEOK

Ist sie gesetzt, ignoriert Python in import-Anweisungen die Groß- und Kleinschreibung. Das funktioniert nur unter Windows und macOS.

PYTHONDONTWRITEBYTECODE

Ist sie auf eine nicht leere Zeichenkette gesetzt, versucht Python nicht, beim Import von Quellmodulen .pyc-Dateien zu schreiben. Das entspricht der Angabe der Option -B.

PYTHONPYCACHEPREFIX

Ist sie gesetzt, schreibt Python .pyc-Dateien in einen gespiegelten Verzeichnisbaum unter diesem Pfad anstatt in Verzeichnisse __pycache__ innerhalb des Quellbaums. Das entspricht der Angabe der Option -X pycache_prefix=PATH.

Neu in Version 3.8.

PYTHONHASHSEED

Ist diese Variable nicht gesetzt oder auf random gesetzt, wird ein Zufallswert als Startwert für die Hashes von str- und bytes-Objekten verwendet.

Ist PYTHONHASHSEED auf einen ganzzahligen Wert gesetzt, wird dieser als fester Startwert verwendet, um hash() für die von der Hash-Randomisierung betroffenen Typen zu erzeugen.

Das soll wiederholbares Hashing ermöglichen, etwa für Selbsttests des Interpreters selbst, oder es mehreren Python-Prozessen in einem Verbund erlauben, dieselben Hash-Werte zu verwenden.

Die Ganzzahl muss eine Dezimalzahl im Bereich [0,4294967295] sein. Mit dem Wert 0 wird die Hash-Randomisierung abgeschaltet.

Neu in Version 3.2.3.

PYTHONINTMAXSTRDIGITS

Ist diese Variable auf eine Ganzzahl gesetzt, stellt sie die globale Längenbegrenzung bei der Umwandlung zwischen Ganzzahl und Zeichenkette des Interpreters ein.

Neu in Version 3.11.

PYTHONIOENCODING

Ist sie vor dem Start des Interpreters gesetzt, überschreibt sie die für stdin/stdout/stderr verwendete Kodierung, in der Form encodingname:errorhandler. Sowohl der Teil encodingname als auch der Teil :errorhandler ist optional und hat dieselbe Bedeutung wie in str.encode().

Bei stderr wird der Teil :errorhandler ignoriert, der Handler ist immer 'backslashreplace'.

Geändert in Version 3.4: Der Teil encodingname ist jetzt optional.

Geändert in Version 3.6: Unter Windows wird die von dieser Variable angegebene Kodierung bei interaktiven Konsolenpuffern ignoriert, sofern nicht zusätzlich PYTHONLEGACYWINDOWSSTDIO angegeben ist. Dateien und Pipes, die über die Standardströme umgeleitet werden, sind nicht betroffen.

PYTHONNOUSERSITE

Ist sie gesetzt, fügt Python das site-packages-Verzeichnis des Benutzers nicht zu sys.path hinzu.

Siehe auch

PEP 370 – site-packages-Verzeichnis pro Benutzer

PYTHONUSERBASE

Legt das Basisverzeichnis des Benutzers fest, aus dem der Pfad des site-packages-Verzeichnisses des Benutzers und die Installationspfade für python -m pip install --user berechnet werden.

Siehe auch

PEP 370 – site-packages-Verzeichnis pro Benutzer

PYTHONEXECUTABLE

Ist diese Umgebungsvariable gesetzt, wird sys.argv[0] auf ihren Wert gesetzt statt auf den Wert aus der C-Laufzeitumgebung. Funktioniert nur unter macOS.

PYTHONWARNINGS

Das entspricht der Option -W. Ist sie auf eine durch Kommas getrennte Zeichenkette gesetzt, entspricht das der mehrfachen Angabe von -W, wobei Filter, die weiter hinten in der Liste stehen, Vorrang vor früheren haben.

Die einfachsten Einstellungen wenden eine bestimmte Aktion bedingungslos auf alle Warnungen an, die ein Prozess ausgibt (auch auf die, die sonst standardmäßig ignoriert werden):

PYTHONWARNINGS=default  # Warn once per call location
PYTHONWARNINGS=error    # Convert to exceptions
PYTHONWARNINGS=always   # Warn every time
PYTHONWARNINGS=module   # Warn once per calling module
PYTHONWARNINGS=once     # Warn once per Python process
PYTHONWARNINGS=ignore   # Never warn

Weitere Einzelheiten unter The Warnings Filter und Describing Warning Filters.

PYTHONFAULTHANDLER

Ist diese Umgebungsvariable auf eine nicht leere Zeichenkette gesetzt, wird beim Start faulthandler.enable() aufgerufen: Es wird ein Handler für die Signale SIGSEGV, SIGFPE, SIGABRT, SIGBUS und SIGILL eingerichtet, der den Python-Traceback ausgibt. Das entspricht der Option -X faulthandler.

Neu in Version 3.3.

PYTHONTRACEMALLOC

Ist diese Umgebungsvariable auf eine nicht leere Zeichenkette gesetzt, werden Python-Speicheranforderungen über das Modul tracemalloc mitgeschrieben. Der Wert der Variable ist die größte Anzahl an Frames, die im Traceback einer Aufzeichnung gespeichert werden. PYTHONTRACEMALLOC=1 speichert zum Beispiel nur den jüngsten Frame. Mehr dazu bei der Funktion tracemalloc.start(). Das entspricht dem Setzen der Option -X tracemalloc.

Neu in Version 3.4.

PYTHONPROFILEIMPORTTIME

If this environment variable is set to a non-empty string, Python will show how long each import takes. This is equivalent to setting the -X importtime option.

Neu in Version 3.7.

PYTHONASYNCIODEBUG

Ist diese Umgebungsvariable auf eine nicht leere Zeichenkette gesetzt, wird der Debug-Modus des Moduls asyncio eingeschaltet.

Neu in Version 3.4.

PYTHONMALLOC

Legt die Python-Speicherverwalter fest und/oder richtet Debug-Hooks ein.

Legt die Familie der von Python verwendeten Speicherverwalter fest:

Debug-Hooks einrichten:

  • debug: richtet Debug-Hooks über den Standard-Speicherverwaltern ein.

  • malloc_debug: wie malloc, richtet aber zusätzlich Debug-Hooks ein.

  • pymalloc_debug: wie pymalloc, richtet aber zusätzlich Debug-Hooks ein.

Neu in Version 3.6.

Geändert in Version 3.7: Der Verwalter "default" wurde hinzugefügt.

PYTHONMALLOCSTATS

If set to a non-empty string, Python will print statistics of the pymalloc memory allocator every time a new pymalloc object arena is created, and on shutdown.

This variable is ignored if the PYTHONMALLOC environment variable is used to force the malloc() allocator of the C library, or if Python is configured without pymalloc support.

Geändert in Version 3.6: Diese Variable lässt sich jetzt auch bei einem im Release-Modus kompilierten Python verwenden. Auf eine leere Zeichenkette gesetzt, hat sie jetzt keine Wirkung.

PYTHONLEGACYWINDOWSFSENCODING

Ist sie auf eine nicht leere Zeichenkette gesetzt, kehrt der Standardmodus für Dateisystemkodierung und Fehlerbehandlung zu den Werten vor 3.6 zurück, also ‚mbcs‘ und ‚replace‘. Andernfalls werden die neuen Standardwerte ‚utf-8‘ und ‚surrogatepass‘ verwendet.

This may also be enabled at runtime with sys._enablelegacywindowsfsencoding().

Availability: Windows.

Neu in Version 3.6: Mehr dazu unter PEP 529.

PYTHONLEGACYWINDOWSSTDIO

Ist sie auf eine nicht leere Zeichenkette gesetzt, werden der neue Konsolenleser und der neue Konsolenschreiber nicht verwendet. Unicode-Zeichen werden dann gemäß der aktiven Codepage der Konsole kodiert und nicht mit utf-8.

Diese Variable wird ignoriert, wenn die Standardströme (in Dateien oder Pipes) umgeleitet werden, anstatt auf Konsolenpuffer zu verweisen.

Availability: Windows.

Neu in Version 3.6.

PYTHONCOERCECLOCALE

Ist sie auf den Wert 0 gesetzt, überspringt die Hauptanwendung der Python-Befehlszeile das Umlenken der alten ASCII-basierten Gebietsschemata C und POSIX auf eine leistungsfähigere UTF-8-basierte Alternative.

Ist diese Variable nicht gesetzt (oder auf einen anderen Wert als 0), ist außerdem die Umgebungsvariable LC_ALL zum Überschreiben des Gebietsschemas nicht gesetzt, und ist das für die Kategorie LC_CTYPE gemeldete aktuelle Gebietsschema entweder das Standard-Gebietsschema C oder das ausdrücklich ASCII-basierte POSIX, dann versucht die Python-Befehlszeile, für die Kategorie LC_CTYPE die folgenden Gebietsschemata in der angegebenen Reihenfolge einzustellen, bevor sie die Laufzeitumgebung des Interpreters lädt:

  • C.UTF-8

  • C.utf8

  • UTF-8

Gelingt es, eine dieser Gebietsschema-Kategorien einzustellen, wird die Umgebungsvariable LC_CTYPE in der aktuellen Prozessumgebung ebenfalls entsprechend gesetzt, bevor die Python-Laufzeitumgebung initialisiert wird. So wird die geänderte Einstellung nicht nur vom Interpreter selbst und von anderen gebietsschemabewussten Komponenten im selben Prozess gesehen (etwa der GNU-Bibliothek readline), sondern auch in Unterprozessen (unabhängig davon, ob darin ein Python-Interpreter läuft) sowie bei Operationen, die die Umgebung anstelle des aktuellen C-Gebietsschemas abfragen (etwa Pythons eigenes locale.getdefaultlocale()).

Das Einstellen eines dieser Gebietsschemata (ausdrücklich oder über das oben beschriebene stillschweigende Umlenken) schaltet automatisch die Fehlerbehandlung surrogateescape für sys.stdin und sys.stdout ein (sys.stderr verwendet weiterhin backslashreplace wie in jedem anderen Gebietsschema). Dieses Verhalten der Ströme lässt sich wie üblich über PYTHONIOENCODING überschreiben.

Zur Fehlersuche sorgt PYTHONCOERCECLOCALE=warn dafür, dass Python Warnmeldungen auf stderr ausgibt, wenn das Umlenken des Gebietsschemas greift oder wenn beim Initialisieren der Python-Laufzeitumgebung noch ein Gebietsschema aktiv ist, das das Umlenken ausgelöst hätte.

Beachte außerdem, dass PYTHONUTF8 auch dann standardmäßig in alten ASCII-basierten Gebietsschemata greift, wenn das Umlenken des Gebietsschemas abgeschaltet ist oder kein geeignetes Ziel-Gebietsschema findet. Beide Funktionen müssen abgeschaltet werden, damit der Interpreter für Systemschnittstellen ASCII anstelle von UTF-8 verwendet.

Availability: Unix.

Neu in Version 3.7: Mehr dazu unter PEP 538.

PYTHONDEVMODE

Ist diese Umgebungsvariable auf eine nicht leere Zeichenkette gesetzt, wird der Python-Entwicklungsmodus eingeschaltet, der zusätzliche Prüfungen zur Laufzeit einführt, die zu aufwendig sind, um standardmäßig eingeschaltet zu sein. Das entspricht dem Setzen der Option -X dev.

Neu in Version 3.7.

PYTHONUTF8

Auf 1 gesetzt, schaltet sie den Python-UTF-8-Modus ein.

Auf 0 gesetzt, schaltet sie den Python-UTF-8-Modus ab.

Jede andere nicht leere Zeichenkette führt beim Initialisieren des Interpreters zu einem Fehler.

Neu in Version 3.7.

PYTHONWARNDEFAULTENCODING

Ist diese Umgebungsvariable auf eine nicht leere Zeichenkette gesetzt, wird eine EncodingWarning ausgelöst, wenn die vom Gebietsschema abhängige Standardkodierung verwendet wird.

Einzelheiten unter Opt-in EncodingWarning.

Neu in Version 3.10.

PYTHONNODEBUGRANGES

Ist diese Variable gesetzt, schaltet sie das Mitführen der Tabellen ab, die jedem Befehl in Codeobjekten zusätzliche Ortsangaben zuordnen (Endzeile, Startspalte und Endspalte). Das ist nützlich, wenn kleinere Codeobjekte und pyc-Dateien gewünscht sind und wenn die zusätzlichen sichtbaren Ortsmarkierungen unterdrückt werden sollen, mit denen der Interpreter Tracebacks anzeigt.

Neu in Version 3.11.

1.2.1. Variablen für den Debug-Modus

PYTHONTHREADDEBUG

If set, Python will print threading debug info into stdout.

Need a debug build of Python.

Deprecated since version 3.10, will be removed in version 3.12.

PYTHONDUMPREFS

Ist sie gesetzt, gibt Python Objekte und Referenzzähler aus, die nach dem Herunterfahren des Interpreters noch leben.

Need Python configured with the --with-trace-refs build option.

PYTHONDUMPREFSFILE=FILENAME

If set, Python will dump objects and reference counts still alive after shutting down the interpreter into a file called FILENAME.

Need Python configured with the --with-trace-refs build option.

Neu in Version 3.11.