# pyenv — Python-Versionen verwalten

> Praxis-Guide zu pyenv – mehrere Python-Versionen parallel installieren, pro Shell oder Projekt umschalten und bei Bedarf aus Quellcode bauen.

Source: https://www.jpkc.com/db/cheatsheets/package-managers/pyenv/

<!-- PROSE:intro -->
pyenv ist ein Versions-Manager für Python: Damit installierst du mehrere Python-Versionen parallel und schaltest pro Shell, pro Projekt oder global zwischen ihnen um. Eine Datei namens `.python-version` im Projektverzeichnis legt fest, welche Version dort automatisch gilt – pyenv schiebt dafür sogenannte Shims in deinen `PATH`, die jeden Aufruf von `python`, `pip` & Co. an die richtige Version weiterreichen. Die gewünschten Versionen baut pyenv bei Bedarf direkt aus dem Quellcode, sodass du nicht auf die Pakete deiner Distribution angewiesen bist. Dieser Guide zeigt dir die wichtigsten Befehle – vom Installieren einer Version bis zu virtuellen Umgebungen mit pyenv-virtualenv.
<!-- PROSE:intro:end -->

## Installieren & Versionen auflisten

`pyenv install <version>` — Installiert eine Python-Version.

```bash
pyenv install 3.12.2
```

`pyenv install --list` — Listet alle installierbaren Versionen auf.

```bash
pyenv install --list
```

`pyenv install --list | grep '^ *3\.'` — Listet verfügbare CPython-3.x-Versionen auf.

```bash
pyenv install --list | grep '^ *3\.'
```

`pyenv versions` — Listet alle installierten Versionen auf (markiert die aktive mit *).

```bash
pyenv versions
```

`pyenv uninstall <version>` — Deinstalliert eine Python-Version.

```bash
pyenv uninstall 3.11.0
```

## Versionen umschalten

`pyenv global <version>` — Legt die globale Standard-Python-Version fest.

```bash
pyenv global 3.12.2
```

`pyenv global <version1> <version2>` — Legt mehrere globale Versionen fest (die erste ist Standard, die übrigen dienen als Fallback).

```bash
pyenv global 3.12.2 3.11.8
```

`pyenv local <version>` — Setzt die Python-Version für das aktuelle Verzeichnis (erzeugt .python-version).

```bash
pyenv local 3.11.8
```

`pyenv shell <version>` — Setzt die Python-Version nur für die aktuelle Shell-Sitzung.

```bash
pyenv shell 3.10.13
```

`pyenv shell --unset` — Hebt die Versions-Überschreibung auf Shell-Ebene auf.

```bash
pyenv shell --unset
```

`pyenv version` — Zeigt die aktuell aktive Python-Version und wie sie gesetzt wurde.

```bash
pyenv version
```

## Infos & Kommandos

`pyenv which <command>` — Zeigt den vollständigen Pfad eines Kommandos für die aktive Version.

```bash
pyenv which python
```

`pyenv whence <command>` — Listet die Versionen auf, die ein bestimmtes Kommando bereitstellen.

```bash
pyenv whence pip
```

`pyenv commands` — Listet alle verfügbaren pyenv-Kommandos auf.

```bash
pyenv commands
```

`pyenv root` — Zeigt das pyenv-Wurzelverzeichnis.

```bash
pyenv root
```

`pyenv prefix <version>` — Zeigt den Installationspfad einer bestimmten Version.

```bash
pyenv prefix 3.12.2
```

## pyenv-virtualenv

`pyenv virtualenv <version> <name>` — Erstellt eine virtuelle Umgebung mit einer bestimmten Python-Version.

```bash
pyenv virtualenv 3.12.2 myproject-env
```

`pyenv virtualenvs` — Listet alle virtuellen Umgebungen auf.

```bash
pyenv virtualenvs
```

`pyenv activate <name>` — Aktiviert eine virtuelle Umgebung.

```bash
pyenv activate myproject-env
```

`pyenv deactivate` — Deaktiviert die aktuelle virtuelle Umgebung.

```bash
pyenv deactivate
```

`pyenv local <virtualenv-name>` — Aktiviert eine virtuelle Umgebung automatisch beim Betreten eines Verzeichnisses.

```bash
pyenv local myproject-env
```

`pyenv virtualenv-delete <name>` — Löscht eine virtuelle Umgebung.

```bash
pyenv virtualenv-delete myproject-env
```

## Wartung

`pyenv rehash` — Baut die Shim-Binaries neu auf (nach dem Installieren von Paketen mit ausführbaren Dateien ausführen).

```bash
pyenv rehash
```

`pyenv update` — Aktualisiert pyenv und alle installierten Plugins (über das pyenv-update-Plugin).

```bash
pyenv update
```

`pyenv doctor` — Prüft die pyenv-Installation auf mögliche Probleme.

```bash
pyenv doctor
```

<!-- PROSE:outro -->
## Fazit

pyenv nimmt dir den Streit mit dem System-Python ab: Statt an der distributionseigenen Version herumzuschrauben, hältst du beliebig viele Versionen nebeneinander und bestimmst pro Projekt punktgenau, welche zum Einsatz kommt. Damit das funktioniert, muss die Shell-Initialisierung sitzen – `eval "$(pyenv init -)"` gehört in deine `.bashrc` bzw. `.zshrc`, sonst greifen die Shims nicht. Weil pyenv die Versionen aus dem Quellcode kompiliert, brauchst du vorab die passenden Build-Abhängigkeiten (etwa `build-essential`, `libssl-dev` und `zlib1g-dev`); fehlen sie, bricht `pyenv install` ab. Für isolierte Projektumgebungen kombinierst du pyenv am besten mit dem Plugin pyenv-virtualenv, das virtuelle Umgebungen sauber an eine `.python-version` koppelt.

## Weiterführende Links

- [pyenv – GitHub-Projekt](https://github.com/pyenv/pyenv) – Quellcode, Installation und vollständige Befehlsreferenz (englisch)
- [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv) – Plugin für virtuelle Umgebungen rund um pyenv (englisch)
- [Suggested build environment](https://github.com/pyenv/pyenv/wiki#suggested-build-environment) – Liste der nötigen Build-Abhängigkeiten je Betriebssystem (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [apk](https://www.jpkc.com/db/cheatsheets/package-managers/apk/) – Paketmanager von Alpine Linux
- [apt](https://www.jpkc.com/db/cheatsheets/package-managers/apt/) – komfortabler Paketmanager für Debian und Ubuntu
- [apt-get](https://www.jpkc.com/db/cheatsheets/package-managers/apt-get/) – klassischer Paketmanager für Debian-Systeme

