Virtuelle Umgebung (venv) für die Entwicklung mit Python einrichten und sichern

Nun geht es ans Eingemachte: Hier sehen wir uns ganz konkret an, wie du eine virtuelle Umgebung mit Python in der Praxis einrichtest und sicherst. Los geht’s.

Zwei der vielen Möglichkeiten: venv und virtualenv

Es gibt in Python viele Möglichkeiten, eine virtuelle Umgebung einzurichten, zwei Module hierfür sind die bekanntesten: venv und virtualenv

Seit Python Version 3.6 bringt die Standardinstallation venv mit und das ist hier das Tool unserer Wahl.

venv in der Praxis

Wir richten die virtuelle Umgebung am Beispiel unseres FizzBuzz-Programms ein, das wir im Rahmen der testgetriebenen Entwicklung erstellt haben.

Wir starten Visual Studio Code und öffnen den FizzBuzz-Ordner. Nun öffnen wir im Hauptmenü über den Punkt „Terminal“ ein „New Terminal“. Was wir hier machen, ginge ohne Weiteres auch über das Standardterminal, aber da wir VS Code aus unsere Python-IDE verwenden, ist dies eine gute Gelegenheit, einmal mehr Funktionen von VS Code kennenzulernen.

Im unten geöffneten Terminalbereich können wir durch die Eingabe von pwd (print working directory) sehen, dass wir uns bereits im gewünschten FizzBuzz-Verzeichnis befinden. Somit können wir gleich mit der Einrichtung der virtuellen Umgebung loslegen:

python3 -m venv fizzbuzz_venv

Durch -m sagen wir Python3, dass wir das folgende Modul – in unserem Fall venv – ausführen möchten. Anschließend folgt der Name der virtuellen Umgebung – in unserem Fall fizzbuzz_venv.

Nach Ausführen des Befehls fragt VS Code, ob wir die neu angelegte virtuelle Umgebung aktivieren möchten? Wir bestätigen dies und VS Code führt für uns den Befehl

source fizzbuzz_venv/bin/activate

aus. Außerhalb von VS Code, wenn wir diese Schritte im Terminal vollzogen hätten, wäre dieser Befehl tatsächlich auch der nächste in der Reihe gewesen.

Nun stellt VS Code fest, dass das Linter-Modul pylint nicht installiert ist und fragt, ob wir es installieren möchten. Auch dies bestätigen wir. VS Code führt für uns den Befehl

python3 -m pip install -U pylint

aus. Damit wird in unserer virtuellen Umgebung namens „fizzbuzz_venv“ der Linter „pylint“ installiert.

Dass wir eine aktivierte virtuelle Umgebung haben, können wir auch am Terminal-Prompt erkennen. Der sieht bei mir folgendermaßen aus:

(fizzbuzz_venv) macbook:fizzbuzz uem$

Der erste Teil des Prompts zeigt in Klammern den Namen unserer Umgebung.

Damit sind wir fürs Erste fertig. Auf der linken Seite nach einem Klick auf den Knopf namens „Explorer“ sehen wir nun zusätzliche Dateien in unserem FizzBuzz-Verzeichnis; die virtuelle Umgebung wurde in einem Verzeichnis „fizzbuzz_venv“ installiert. Zum Abschluss führen wir einmal unsere Tests aus, die wir in „TestFizzBuzz.py“ geschrieben haben. Einmal mehr lässt sich hier erkennen, wie nützlich diese Tests sind, denn dank ihrer können wir ganz einfach und schnell prüfen, ob unsere letzten Handlungen unser Programm beeinträchtigen oder nicht.

Unsere virtuelle Umgebung steckt in fizzbuzz_venv.

! Wichtig !

Wir haben nun eine aktive virtuelle Umgebung, in der wir arbeiten. Das war unser Ziel, das haben wir erreicht. Allerdings muss uns bewusst sein, dass wir beim Beenden von VS Code – genauer: unserer Terminal-Session – auch die aktive virtuelle Umgebung beenden.

Wir müssen also beim nächsten Mal, wenn wir unser Projekt geöffnet haben und wieder daran arbeiten wollen, erst mit dem Befehl

source fizzbuzz_venv/bin/activate

die virtuelle Umgebung erneut starten.

Eine aktive virtuelle Umgebung lässt sich übrigens auch per Befehl beenden, der da kurz und schmerzlos lautet:

deactivate

Sichern der virtuellen Umgebung

Nun gilt es die neu eingerichtete virtuelle Umgebung so zu sichern, dass sie auf anderen Rechnern schnell reproduziert werden kann. Schließlich ist dies ein konkreter Vorteil der Einrichtung einer solchen Umgebung. Dafür „frieren“ wir die Umgebung in einer Beschreibungsdatei ein. Es ist Usus, diese Datei, in der die Eigenschaften einer jeweiligen Umgebung gesichert werden, „requirements.txt“ zu nennen.

Mit der Ausführung des Befehls

pip freeze > requirements.txt

im Terminal von VS Code erhalten wir – wie erwartet – eine Datei namens „requirements.txt“ in unserem Verzeichnis, in die wir problemlos hineinschauen können. Darin sind die Module in ihrer jeweiligen Version aufgelistet.

Möchten wir auf einem anderen Rechner unsere auf diese Weise „eingefrorene“ Umgebung wieder auftauen, tun wir das mit folgender Zeile im Terminal:

pip install -r requirements.txt

Und in Zukunft?

Arbeiten wir an unserem Projekt weiter, so werden wir wahrscheinlich auch weitere Module hinzufügen. Damit diese Module zukünftig ebenfalls auf anderen Rechnern zur Verfügung stehen, wiederholen wir nach der Installation eines Moduls einfach das Einfrieren aller Module in die requirements-Datei:

pip freeze > requirements.txt

Auf diese Weise halten wir die Datei immer auf dem neuesten Stand.

Wenn venv nicht mehr reicht

Anwenderinnen und Anwender, die über das hier gezeigte Verhalten hinausgehende Bedürfnisse haben, die ihrer komplexen Projektstruktur und unterschiedlichen Abhängigkeiten geschuldet sind, sollten sich das Modul pipenv ansehen. Dieses bietet weitergehende Konfigurationsmöglichkeiten als venv.