Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

PEP 486 – Machen Sie den Python Launcher mit virtuellen Umgebungen vertraut

Autor:
Paul Moore <p.f.moore at gmail.com>
Status:
Final
Typ:
Standards Track
Erstellt:
12-Feb-2015
Python-Version:
3.5
Post-History:
12-Feb-2015
Resolution:
Python-Dev Nachricht

Inhaltsverzeichnis

Zusammenfassung

Die Windows-Installer für Python enthalten einen Launcher, der den richtigen Python-Interpreter zum Ausführen findet (siehe PEP 397). Der Launcher ist jedoch nicht mit virtuellen Umgebungen (virtualenv [1] oder PEP 405 basiert) vertraut und kann daher nicht verwendet werden, um Befehle aus der aktiven virtuellen Umgebung auszuführen.

Dieser PEP schlägt vor, den Launcher „virtuelle Umgebungen-bewusst“ zu machen. Das bedeutet, dass der Launcher, wenn er ohne Angabe eines expliziten Python-Interpreters ausgeführt wird, die derzeit aktive virtuelle Umgebung verwendet, falls vorhanden, bevor er auf die konfigurierte Standard-Python-Version zurückfällt.

Begründung

Windows-Benutzer mit mehreren installierten Python-Kopien benötigen eine Möglichkeit, auszuwählen, welche verwendet werden soll. Der Python-Launcher bietet diese Möglichkeit durch einen Befehl namens py, der entweder eine konfigurierte „Standard“-Python-Version oder einen bestimmten Interpreter über Befehlszeilenargumente ausführen kann. Die typische Verwendung wäre:

# Run the Python interactive interpreter
py

# Execute an installed module
py -m pip install pytest
py -m pytest

Bei Verwendung von virtuellen Umgebungen ist der py Launcher nicht über die aktive virtuelle Umgebung informiert und verwendet weiterhin die System-Python-Version. Daher sind unterschiedliche Befehlaufrufe erforderlich, um dieselben Befehle in einer virtuellen Umgebung auszuführen.

# Run the Python interactive interpreter
python

# Execute an installed module (these could use python -m,
# which is longer to type but is a little more similar to the
# launcher approach)
pip install pytest
py.test

Die Notwendigkeit, unterschiedliche Befehle zu verwenden, ist fehleranfällig, und in vielen Fällen ist der Fehler sofort schwer zu erkennen. Der PEP schlägt vor, den py Befehl mit virtuellen Umgebungen nutzbar zu machen, sodass die erste Form des Befehls in allen Fällen verwendet werden kann.

Implementierung

Sowohl virtualenv als auch das Kernmodul venv setzen beim Aktivieren einer virtuellen Umgebung eine Umgebungsvariable VIRTUAL_ENV. Dieser PEP schlägt vor, dass der Launcher die Umgebungsvariable VIRTUAL_ENV prüft, wann immer er den „Standard“-Python-Interpreter für das System ausführen würde (d. h. wenn keine expliziten Versionsflags wie py -2.7 verwendet werden) und, falls vorhanden, den Python-Interpreter der virtuellen Umgebung anstelle des Standard-System-Pythons ausführt.

Der oben genannte „Standard“-Python-Interpreter ist (gemäß PEP 397) entweder die neueste auf dem System installierte Python-Version oder eine über die Konfigurationsdatei py.ini konfigurierte Version. Wenn der Benutzer explizit eine Python-Version in der Befehlszeile angibt, wird diese wie bisher immer verwendet.

Auswirkungen auf das Starten von Skripten

Neben der interaktiven Nutzung wird der Launcher als Dateizuordnung für Python-Skripte unter Windows verwendet. In diesem Fall wird eine „Shebang“-Zeile (#!) am Anfang des Skripts verwendet, um den auszuführenden Interpreter zu identifizieren. Ein vollständig qualifizierter Pfad kann verwendet werden, oder eine versionsspezifische Python-Version (python3 oder python2, oder sogar python3.5), oder das generische python, was bedeutet, den Standard-Interpreter zu verwenden.

Der Launcher sucht auch nach der spezifischen Shebang-Zeile #!/usr/bin/env python. Unter Unix sucht das Programm env nach einem Befehl in $PATH und führt den gefundenen Befehl aus. Ähnlich sucht der Launcher mit dieser Shebang-Zeile nach einer Kopie von python.exe im aktuellen %PATH% des Benutzers und führt diese Kopie aus.

Da die Aktivierung einer virtuellen Umgebung bedeutet, dass sie zu PATH hinzugefügt wird, ist keine spezielle Behandlung erforderlich, um Skripte mit der aktiven virtuellen Umgebung auszuführen – sie müssen lediglich die Shebang-Zeile #!/usr/bin/env python verwenden, genau wie unter Unix. (Wenn keine virtuelle Umgebung aktiv ist und kein python.exe in PATH vorhanden ist, sucht der Launcher nach einer Standard-Python-Version, als ob die Shebang-Zeile #!python gelautet hätte).

Ausschlüsse

Der PEP versucht nicht, die Verwendung des Launchers für die Ausführung von Python unter Windows zu fördern. Die meiste bestehende Dokumentation geht davon aus, dass der Benutzer python als Befehl zum Ausführen von Python verwendet, und (zum Beispiel) pip, um einen installierten Python-Befehl auszuführen. Es wird nicht erwartet, dass sich diese Dokumentation ändert, und Benutzer, die ihre Umgebungsvariable PATH verwalten möchten, können diese Form weiterhin verwenden. Der Fokus dieses PEP liegt ausschließlich darauf, Benutzern, die es vorziehen, den Launcher bei der Arbeit mit ihren System-Python-Installationen zu verwenden, zu ermöglichen, dies auch bei der Verwendung von virtuellen Umgebungen weiterhin zu tun.

Referenzimplementierung

Ein Patch, der das vorgeschlagene Verhalten implementiert, ist verfügbar unter http://bugs.python.org/issue23465

Referenzen


Quelle: https://github.com/python/peps/blob/main/peps/pep-0486.rst

Zuletzt geändert: 2025-02-01 08:59:27 GMT