Das Umgehen mit virtuellen Umgebungen

Eine Einführung in die Einrichtung einer virtuellen Umgebung in Python.

Warum sind virtuelle Umgebungen wichtig?

Für jedes neue Data-Science Projekt, das begonnen wird - sei es in Python, R oder in einer anderen Programmiersprache - wird empfohlen, zunächst eine virtuelle Umgebung zu erstellen, anstatt jedes neue Projekt über eine globale Umgebung aufzusetzen. Warum? Weil, sobald begonnen wird, Packages eines spezifischen (aktuellen) Projektes zu aktualisieren, ein Risiko besteht, dass ein anderes (unabhängiges) Projekt nicht mehr funktioniert. Der Grund, weshalb das eine Projekt dann nicht mehr funktioniert, lässt sich darauf zurückführen, dass die neu aktualisierten Packages im aktuellen Projekt einige Abhängigkeitsprobleme mit einem / mehreren anderen Package(s) verursachen könnte(n), welche(s) in einem der älteren Projekte verwendet wurde(n).

  • Und die (schlimmste) Konsequenz daraus ist: Ein gesamtes (altes, aber dennoch ausgefeiltes) Projekt könnte nicht mehr funktionieren und viele Stunden harter Arbeit könnten dadurch verschwendet sein!

Um diese Abhängigkeits-Alpträume in einer einzigen globalen Umgebung zu vermeiden, wurden virtuelle Umgebungen geschaffen, die es jedem (Data-Science) Projekt ermöglichen, ein unabhängiges Stück Software zu sein. Wenn wir also eine Bibliothek aktualisieren, geschieht dies auf Projektebene und nicht mehr auf globaler Ebene (und wir werden unsere harte Arbeit in alten Projekten nie mehr zerstören)! 🔥

Ein Beispiel

Das Hauptziel dieses Beitrags ist es, anhand eines konkreten Beispiels aufzuzeigen, wie eine virtuelle Umgebung eingerichtet werden kann.

Wir starten mit einem “weissen Blatt” (= neues Projekt). Nehmen wir an, unser Ziel ist es, eine Powerpoint-Präsentation zu automatisieren. Dies ist möglich, indem wir - beispielsweise - das Python-Package python-pptx installieren. Bevor wir mit der Installierung des python-pptx Packages beginnen, werden wir eine virtuelle Umbegung kreieren, um Abhängigkeitsprobleme mit anderen Projekte zu vermeiden.

Das Set-Up

Bevor wir beginnen:
Wir müssen sicherstellen, dass wir python auf unserem Rechner installiert haben! Hierzu muss ein Terminal geöffnet werden, um folgenden Code einzugeben: python --version. Falls das Terminal uns ein Feedback mit einer Version von Python ausgibt, dann ist Python auf unserem Computer einsatzbereit 💪

Als nächstes, noch eine Bemerkung: dieses Set-Up wurde für Nutzer gedacht, die VS-Code als ihre IDE benutzen. Es sollte aber auch mit jedem anderen IDE - zum Beispiel PyCharm oder R - funktionieren:

  1. Zunächst erstellen wir einen neuen Projekt-Ordner. Dieser dient als Ablage für alle unsere Files, die wir für dieses Projekt benötigen. Der Name für diesen Projekt-Ordner kann beliebig gewählt werden. In meinem Fall, habe ich mich für den Namen powerpoint-automation entschieden. Dies wird unser sogenanntes “Arbeitsverzeichnis” (oftmals wird es auch “Working Directory” bezeichnet, aus dem Englischen) für dieses Projekt sein.
  2. Als nächstes müssen wir in unser Arbeitsverzeichnis wechseln (der Computer weiss das noch nicht). Für diesen Schritt benötigen wir ein Terminal. Öffnen Sie Ihr Terminal und geben Sie den Pfad ein, in dem sich Ihr Projekt (das wir im ersten Schritt erstellt haben) befindet. Um im Rahmen meines Beispiels zu bleiben, gebe ich deshalb folgenden Code im Terminal ein: cd /Users/jomaye/Documents/Programming/Python/projects/powerpoint-automation, wobei cd der Befehl ist, um dem Computer mitzuteilen, dass wir uns in den Ordner powerpoint-automation bewegen wollen und dabei /Users/jomaye/Documents/Programming/Python/projects/powerpoint-automation der Pfad zu meinem Arbeitsverzeichnis ist.

Erstellung einer virtuellen Umgebung

Nun haben wir das Set-Up beisammen, um - als Nächstes - eine virtuelle Umgebung in Python (mit der Verwendung von venv) zu erstellen. Dies geht in 3 Schritten:

  1. Wir müssen in unserem Terminal folgendes eingeben (es ist dabei wichtig sicherzustellen, dass wir uns im Arbeitsverzeichnis befinden!): python3 -m venv ppp-env2. Dadurch wird die virtuelle Umgebung mit dem Namen ppp-env2 erstellt.
  2. Als nächstes muss die virtuelle Umgebung noch aktiviert werden (zur Zeit wurde Sie bloss erstellt, befindet sich jedoch in einem inaktiven Zustand). Je nachdem, was für eine Art von Computer wir verwenden, wird sich der Code allerdings ein bisschen unterscheiden:
    • Falls Sie einen Mac benutzen, wird folgender Code benötigt: source ppp-env2/bin/activate.
    • Falls Sie einen Windows-Computer benutzen, wird folgender Code benötigt: ppp-env2\Scripts\activate.bat
  3. Um zu überprüfen, ob alles funktioniert, geben wir abschliessend das Folgende in unserem Terminal ein: python --version

Das war’s mit der Installation der virtuellen Umgebung! Herzlichen Glückwunsch 🥳 Nun können wir mit dem eigentlichen Aufsetzen des Projektes beginnen.

Installation der benötigten Packages

Nun, da die virtuelle Umgebung eingerichtet ist, können wir damit beginnen, die benötigten Pakete zu installieren.

In diesem Beispiel benötige ich nur 1 Paket:

  • pip install python-pptx

Erstellen unserer ersten automatisierten Powerpoint

Nun, da wir die notwendigen Packages für unser Beispiels-Projekt installiert haben, können wir mit dem Aufbau unserer ersten Python-Powerpoint Präsentation beginnen:

  1. Hierzu erstellen wir zunächst eine .py-Datei in unserem powerpoint-automation-Ordner (= mein Arbeitsverzeichnis).
    • Ich nenne meine Datei: hello-world.py
  2. Als nächstes fügen wir folgenden Code in die neue Datei hello-world.py ein:
from pptx import Präsentation

prs = Präsentation()
titel_folien_layout = prs.folien_layouts[0]
Folie = prs.slides.add_slide(title_slide_layout)
Titel = Folie.Formen.Titel
subtitle = slide.placeholders[1]

title.text = "Hallo, Welt!"
subtitle.text = "python-pptx war hier!"

prs.save('test.pptx')
  1. Zu guter Letzt, können wir das Python-Skript hello-world.py ausführen, indem wir ins Terminal wechseln und dabei folgendes eintippen: python hello-world.py.
    • Wenn ein Fehler wie "File "hello-world.py", line 1, in <module> from pptx import Presentation auftritt: Führen Sie stattdessen python3 hello-world.py aus.

Potenzielles Problem mit virtuellen Umgebungen

Für Anfänger kann ein sehr frustrierendes Problem auftreten, wenn sie das erste Mal mit virtuellen Umgebungen in Kontakt kommen:

**Falls nämlich ein Name von irgendeinem beliebigen Ordner geändert wird, welcher im Pfad eines Projekts mit einer virtuellen Umgebung definiert wurde, führt das dazu, dass das Projekt mit der falschen Python-Version laufen wird.

Als ich zum Beispiel meinen Projektpfad änderte, führte dies dazu, dass mein Projekt mit der Version 2.7.16 (statt eigentlich Python 3.8.2) lief und alle Code-Ausfürungen im Projekt durcheinanderbrachte! Um zu verstehen, warum das Projekt jetzt mit der falschen Python-Version lief, musste ich zu folgendem Ordner navigieren (vorausgesetzt, dass man sich gerade im Arbeitsverzeichnis des Projekts befindet!): Pfad_zur_virtuellen_Umgebung/bin/activate.

Als nächstes muss die activate-Datei geöffnet werden. Nachdem diese geöffnet wurde, sollte die Variable VIRTUAL_ENV überprüft werden. In meinem Fall sah ich das Folgende:

VIRTUAL_ENV="/Users/jomaye/Documents/Programming/Python/projects/libraries-to-try/statsmodels/env-statmodels"

Um den Fehler zu beheben, musst ich bloss den Pfad der Variable VIRTUAL_ENV wie folgt ändern:

    VIRTUAL_ENV="/Users/jomaye/Documents/Programming/Python/projects/data-science/statsmodels/env-statmodels"

Wie aus dem obigen Beispiel gesehen werden kann, bestand das Problem darin, dass ich den Ordner libraries-to-try in data-science umbenannt hatte. Daher war der Pfad zu venv falsch und führte dazu, dass der Computer automatisch auf die Standard-Python-Version 2.7.16 umschaltete, die auf meinem Mac installiert ist (anstatt der Python 3.8.2-Version, die ich eigentlich wollte…)_.

Um zu überprüfen, ob das Problem behoben werden konnten, muss abschliessend nur noch folgendes ins Terminal eingegeben werden: python --version.

Wenn hierbei - als Feedback - nun die Verwendung einer neueren Python-Version angegeben wird (also in meinem Fall Python 3.8.2, statt der alten Version 2.7.16), dann sollte die virtuelle Umgebung wieder einwandfrei funktionieren! 🤩

Fazit

In diesem Artikel habe ich gezeigt, wie wichtig die Verwendung einer virtuellen Umgebung beim Start eines neuen (Data-Science) Projekts ist. Ob für kleinere oder größere Projekte, eine kontrollierte (virtuelle) Umgebung im Vergleich zu einer einzigen globalen Umgebung verringert das Risiko, dass eines unserer älteren Projekte aufgrund von Abhängigkeitsproblemen nicht mehr läuft, beträchtlich.

Allerdings haben virtuelle Umgebungen auch ihre Nachteile. Das Ändern des Pfades zu einem Projekt mit einer virtuellen Umgebung führt dazu, dass es die globale Python-Version ausführt, die auf unserem Computer installiert ist, statt derjenigen Python-Version, die wir in der virtuellen Umgebung festgelegt haben, was mit Sicherheit dazu führt, dass unser Projekt ebenfalls nicht mehr einfwandfrei läuft. Um dieses Problem zu beheben, muss der Pfad unserer VIRTUAL_ENV-Variablen in der activate-Datei abgeändert werden, welche sich auf dem Pfad_zu_unserer_virtuellen_Umgebung/bin/activate-Pfad unseres Arbeitsverzeichnisses befindet.

Zu meinen Interessen gehören Webentwicklung, Data Science, Verhaltensökonomie und alles, was mit Unternehmertum zu tun hat.