19 Punkte von GN⁺ 2024-03-26 | 7 Kommentare | Auf WhatsApp teilen
  • Ermöglicht den einfachen Wechsel zwischen mehreren Python-Versionen
  • Folgt der UNIX-Tradition eines einfachen, unauffälligen Werkzeugs mit einem klaren Zweck, das zuverlässig funktioniert
  • Dieses Projekt wurde von rbenv und ruby-build abgespalten und für Python angepasst

Was pyenv macht

  • Ermöglicht das Ändern der globalen Python-Version pro Benutzer.
  • Unterstützt projektspezifische Python-Versionen.
  • Ermöglicht das Überschreiben der Python-Version über Umgebungsvariablen.
  • Kann mehrere Versionen von Python-Befehlen gleichzeitig durchsuchen. Das ist nützlich, um mit tox versionsübergreifend zu testen.

Was pyenv nicht macht...

  • Hängt nicht von Python selbst ab. pyenv ist als reines Shell-Skript geschrieben.
  • Muss nicht in die Shell geladen werden. Stattdessen verwendet es einen Shim-Ansatz durch das Hinzufügen eines Verzeichnisses zu PATH.
  • Verwaltet virtualenv nicht. Natürlich können Nutzer selbst virtualenvs erstellen oder dies mit pyenv-virtualenv automatisieren.

Wie es funktioniert

  • pyenv fängt Python-Befehle über in PATH eingeschleuste Shim-Executables ab, bestimmt die von der Anwendung angegebene Python-Version und leitet den Befehl dann an die entsprechende Python-Installation weiter.

PATH verstehen

  • Wenn ein Befehl wie python oder pip ausgeführt wird, sucht das Betriebssystem in der Liste der Verzeichnisse aus der Umgebungsvariablen PATH nach einer ausführbaren Datei mit diesem Namen.

Shims verstehen

  • pyenv fügt das Verzeichnis shims an den Anfang von PATH ein. Durch den Prozess des rehashing hält es Shims für alle Python-Befehle aller installierten Python-Versionen vor.

Auswahl der Python-Version verstehen

  • Beim Ausführen eines Shims liest und verwendet pyenv die Python-Version in dieser Reihenfolge aus den folgenden Quellen:
    1. Die Umgebungsvariable PYENV_VERSION (falls gesetzt).
    2. Die anwendungsspezifische Datei .python-version im aktuellen Verzeichnis (falls vorhanden).
    3. Die erste .python-version-Datei, die beim Durchsuchen aller übergeordneten Verzeichnisse bis zur Wurzel des Dateisystems gefunden wird (falls vorhanden).
    4. Die globale Datei $(pyenv root)/version.

Den Installationsort der von pyenv bereitgestellten Python-Versionen finden

  • pyenv leitet den Befehl abhängig von der ermittelten Python-Version an die entsprechende Python-Installation weiter.
  • Jede Python-Version wird in ihrem eigenen Verzeichnis unter $(pyenv root)/versions installiert.

Verwendung

Zusätzliche Python-Versionen installieren

  • Verwende pyenv install, um zusätzliche Python-Versionen zu installieren.

Automatische Auflösung zur neuesten Version

  • Alle Pyenv-Unterbefehle außer uninstall lösen vollständige Präfixe automatisch zur neuesten Version auf.

Python-Versionen mit Erweiterungsunterstützung

  • Es gibt Python-Releases, auf die vom Nutzer bereitgestellte Patches angewendet werden, um in bestimmten Umgebungen zusätzliche Unterstützung bereitzustellen.

Zwischen Python-Versionen wechseln

  • Um eine von Pyenv installierte Python-Version zu verwenden, führe einen der folgenden Befehle aus:
    • pyenv shell
    • pyenv local
    • pyenv global

Python-Versionen entfernen

  • Mit der Zeit sammeln sich Python-Versionen im Verzeichnis $(pyenv root)/versions an.
  • Um alte Python-Versionen zu entfernen, verwende pyenv uninstall .

Weitere Aufgaben

  • Um eine Liste aller verfügbaren Unterbefehle anzuzeigen, führe pyenv commands aus.

pyenv entfernen

  • Es ist einfach, Pyenv vorübergehend zu deaktivieren oder vom System zu entfernen.

Pyenv-Plugins

  • Mit Plugins lässt sich die Funktionalität von Pyenv auf einfache, flexible und wartbare Weise erweitern und anpassen.

Erweiterte Konfiguration

  • Es gibt Umgebungsvariablen, die das Verhalten von Pyenv steuern.

Entwicklung

  • Der Pyenv-Quellcode wird auf GitHub gehostet.
  • Tests werden mit Bats ausgeführt.

Meinung von GN⁺

  • pyenv ist ein sehr nützliches Tool zur Verwaltung verschiedener Python-Versionen. Besonders hilfreich ist es für Entwickler, die in mehreren Projekten unterschiedliche Python-Versionen einsetzen müssen.
  • Da dieses Tool nicht von Python selbst abhängt und aus reinen Shell-Skripten besteht, kann es auch auf Systemen installiert und verwaltet werden, auf denen Python nicht installiert ist.
  • pyenv verwaltet virtualenv nicht direkt, aber mit dem Plugin pyenv-virtualenv lässt sich die virtualenv-Verwaltung bequem automatisieren.
  • Da Installation und Nutzung relativ einfach sind, ist es auch für Einsteiger im Software Engineering mit Bedarf an Python-Versionsverwaltung gut zugänglich.
  • Ein anderes Tool mit ähnlicher Funktionalität wie pyenv ist conda, das besonders in den Bereichen Data Science und Machine Learning weit verbreitet ist. Da conda Paketverwaltung und Umgebungsverwaltung zusammen bietet, kann es für Nutzer empfohlen werden, die diese Funktionen benötigen.
  • Bei der Einführung von pyenv ist Vorsicht geboten, wenn bereits mehrere Python-Versionen auf dem System installiert sind, um Pfadkonflikte zu vermeiden. Der Vorteil von pyenv liegt in der einfachen Versionsverwaltung, aber eine falsche Konfiguration kann den Standard-Python-Pfad des Systems beeinträchtigen.

7 Kommentare

 
koxel 2024-03-26

Bei conda ist Vorsicht geboten: In Unternehmen ab einer gewissen Größe
ist es kostenpflichtig.
Auch wenn die eigene Firma klein ist, ist die Auslieferung heikel, wenn der Auftraggeber groß ist.

 
koxel 2024-03-26

Conda selbst ist unter BSD kostenlos, aber Sie sollten sich die Lizenzen des Repositories und der Pakete genau ansehen.

 
tujuc 2024-03-26

Ich setze asdf auf oberster Ebene ein: https://asdf-vm.com/

Je nach Projekt konfiguriere ich es auch lokal oder nutze Container ...

Inzwischen gibt es so viele Möglichkeiten, neue Umgebungen aufzusetzen und zu verwalten, dass ich es eigentlich nicht mehr oft benutze .. haha

 
sngwn 2024-03-26

Ich nutze es auch genau so.
Haha, persönlich habe ich das Gefühl, dass pyenv inzwischen ein bisschen altbacken wirkt.

 
joyfui 2024-03-26

Weil ständig Dinge wie rbenv, pyenv und nodenv auftauchen, ist am Ende sogar noch anyenv entstanden. haha
https://github.com/anyenv/anyenv

 
GN⁺ 2024-03-26
Hacker-News-Kommentare
  • Warnung vor der Nutzung von pyenv

    • pyenv hat den großen Nachteil, Python auf dem Rechner des Nutzers selbst zu kompilieren.
    • In dieser Situation gibt es sehr viele mögliche Fehlerbilder.
    • pyenv ist kein Werkzeug für Einsteiger, um Python-Packaging-Probleme zu lösen, sondern ein Expertenwerkzeug zur Standardisierung von Setups.
    • Nutzer haben oft Probleme, die durch pyenv verursacht werden, ohne das überhaupt zu erkennen.
  • Das Leid der Python-Programmierer

    • Erstaunen über die unnötigen Schwierigkeiten, mit denen Python-Programmierer konfrontiert sind.
    • Mehrere Python-Versionen installieren zu müssen, ist irrational.
    • Das Konzept, dass Python-Programme überall laufen, ist in der Praxis nicht brauchbar.
    • Alles ist fragil und funktioniert ohne die exakte Sprachversion nicht.
    • Die Abhängigkeitsprobleme sind so gravierend, dass man einen Paketmanager für den Paketmanager braucht.
  • Werkzeuge, um Python-Programme stabil zu halten

    • Eine Liste von Werkzeugen, die sicherstellen sollen, dass Python-Programme genauso funktionieren wie zum Zeitpunkt ihrer ersten Erstellung.
    • Dazu gehören verschiedene Werkzeuge wie requirements.txt, pip, pipenv, pyenv und virtualenv.
  • Vorstellung des Tools Mise

    • Das in Rust geschriebene Mise ist wie asdf, aber schneller und hat standardmäßig keine Shims.
    • Es installiert Laufzeiten parallel und lädt die benötigten Plugins herunter.
    • Es kann als besseres Werkzeug als asdf oder pyenv verwendet werden.
  • Vorteile von ASDF

    • ASDF unterstützt nicht nur Python, sondern auch viele andere Sprachen und Werkzeuge wie Rust, Go und Node.
  • Erfahrungen mit pyenv

    • Zu Beginn gab es bei der Nutzung von pyenv keine Probleme, aber nach der Installation mehrerer Python-Versionen traten Schwierigkeiten auf.
    • Statt pyenv ist es stabiler, Python von python.org herunterzuladen und virtuelle Umgebungen mit python<version> -m venv /my/virtual/env zu verwalten.
  • Persönlicher Python-Verwaltungs-Stack

    • Python-Versionen werden mit pyenv verwaltet, und für jedes Projekt wird mit venv eine neue virtuelle Umgebung erstellt.
    • Für die Projektinitialisierung und das Abhängigkeitsmanagement wird Poetry verwendet.
    • Wer Dropbox nutzt, sollte den Ordner .venv zur Ignorierliste hinzufügen.
    • pyenv funktioniert auf Ubuntu gut, nachdem alle erforderlichen Abhängigkeiten installiert wurden.
  • Verwaltung von Laufzeitabhängigkeiten mit Mise

    • Verwendung von mise, um die meisten Laufzeitabhängigkeiten wie Python, Node, Ruby und Terraform auf dieselbe Weise zu behandeln.
    • Auch virtuelle Python-Umgebungen können aktiviert werden.
  • Geteilter macOS-Workflow

    • Die benötigten Python-Binärdateien werden von python.org heruntergeladen, und mit virtualenv werden virtuelle Umgebungen eingerichtet.
    • Für das Projektmanagement werden pyproject.toml und pip-compile verwendet.
    • Im Bereich der Verwaltung von Python-Projekten hat es viele Veränderungen gegeben, aber mit diesem Workflow konnte all das ignoriert werden.
 
edunga1 2024-03-26

In dieser Situation kann es sehr viele mögliche Fehlermodi geben.

Ich glaube, genau dieser Punkt ist besonders schmerzhaft.