HH maczarr.de

PyEnv: Python-Versionen und -venv managen

Vor fast genau einem Jahr hatte ich hier mal über pipx geschrieben. Heute soll es um ein ähnliches Thema gehen, nämlich venv und Python-Versionen managen.

Was macht PyEnv?

PyEnv ermöglicht es dir einfach und bequem mehrere Python-Versionen auf deinem System zu nutzen, ohne dass du etwas an der systemweiten Python-Version ändern musst. Das ist sehr praktisch, wenn man Software testen will oder eine Software (derzeit) nur mit einer bestimmten Version von Python läuft.

Installieren und Einrichten

Aus den Paketquellen installierst du die Pakete pyenv und pyenv-virtualenv. Um alles final einzurichten führst du diese zwei Befehle noch aus (in meinem Fall hier für ZSH):

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

In der .zshrc sollten nun diese drei Zeilen stehen:

eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

PyEnv benutzen

Im Terminal kannst du nun mittels pyenv install 3.10 zum Beispiel Python 3.10 installieren. Um es in einem Verzeichnis für ein Virtualenv zu verwenden gehst du in das entsprechende Verzeichnis und führst dort aus:

pyenv virtualenv 3.10 venv310

Damit hast du nun ein Virtualenv mit dem Namen venv310 erstellt, das Python 3.10 benutzt. Um es nun zu aktivieren schreibst du:

pyenv activate venv310

Ab jetzt wird in diesem und den Unterverzeichnissen alles mit Python 3.10 ausgeführt. Du kannst das direkt testen mittels python --version. Zum Deaktivieren des Virtualenv schreibst du einfach source deactivate.

(De-)Aktivieren automatisieren

Wenn du Aktivieren und Deaktivieren nicht immer von Hand machen möchtest schreibst du in dem Verzeichnis einmal pyenv local venv310 (bzw. den Namen des zuvor angelegten Virtualenv, das du hier jetzt immer benutzen möchtest). Von nun an wird das Virtuelenv automatisch aktivieret, wenn du via Terminal das Verzeichnis betrittst und wieder deaktiviert, wenn du das Verzeichnis verlässt. Das funktioniert einfach mittels einer .python-version-Datei, die durch den obigen Befehl erzeugt wird. Möchtest du das Verhalten deaktivieren, lösche einfach die Datei.