Virtuelle Umgebungen

Wenn außer SmartHomeNG noch weitere Software mit Python auf dem gleichen System läuft, kann es sinnvoll sein die einzelnen Python Umgebungen voneinander zu trennen und eine virtuelle Umgebung zu nutzen.

Dazu gibt es verschiedene Ansätze. Zwei Artikel in englisch über Pipenv & Virtual Environments und Why the Need for Virtual Environments sind lesenswert. Eine Übersicht findet sich auf Stackoverflow.

Danach werden aktuell (Stand November 2020) empfohlen:

Venv

Venv ist im Standardumfang von Python3 enthalten. Es findet vor allem dann Verwendung, wenn nur ein einziger Python Interpreter installiert und genutzt werden soll.

Zunächst in den Basisordner von SmartHomeNG wechseln. Dort wird dann eine virtuelle Umgebung mit Namen env erstellt und aktiviert. Pip wird aktualisiert und die Basisabhängigkeiten von SmartHomeNG installiert.

cd /usr/local/smarthome                         # Eventuell an anderes Basisverzeichnis anpassen
python3 -m venv env
source env/bin/activate                         # Aktivieren der virtuellen Umgebung für diese Shell
python3 -m pip install pip --upgrade            # Pip für virtuelle Umgebung aktualisieren
python3 -m pip install -r requirements/base.txt # Installieren der Bibliotheken für die Basis von SmartHomeNG

Nun sollten die Abhängigkeiten für die Basis von SmartHomeNG erfüllt sein. Einige Plugins brauchen eventuell weitere Bibliotheken. Jedes Plugin bringt eine eigene requirements.txt Datei mit. Die benötigten Bibliotheken können installiert werden mit:

cd /usr/local/smarthome                            # Eventuell an anderes Basisverzeichnis anpassen
source env/bin/activate                            # Aktivieren der virtuellen Umgebung für diese Shell
pip install -r plugins/pluginname/requirements.txt # Installieren der Bibliotheken für das Plugin <pluginname>

Es gilt daran zu denken, das es Python Bibliotheken gibt, die weitere Pakete benötigen die nur mit apt installiert werden können. In diesem Fall sollte es einen Hinweis in der Readme des Plugins geben.

Jedes mal wenn man SmartHomeNG mit einer virtuellen Umgebung nutzen will, muß diese in der aktuellen Shell aktiviert werden:

cd /usr/local/smarthome                         # Eventuell an anderes Basisverzeichnis anpassen
source env/bin/activate                         # Aktivieren der virtuellen Umgebung für diese Shell

Die virtuelle Umgebung kann deaktiviert werden durch den Befehl deactivate in der aktuellen Shell.

Pyenv

Pyenv ist in der Lage mit unterschiedlichen Python Versionen umzugehen. Das ist dann sinnvoll um einen Code mit verschiedenen Interpretern laufen zu lassen und zu testen. Da Pyenv nicht im Lieferumfang von Python enthalten ist, muß es extra installiert werden. Die Anweisungen und Nutzungsbeschreibung finden sich im Github Repo für das Pyenv Projekt.

Pyenv steht in einer für Windows portierten Version zur Verfügung. Diese kann sogar mit Pip installiert werden.

Pipenv

Pipenv kombiniert Pip mit virtuellen Umgebungen und kann Pyenv automatisch verwenden, um verschiedene Versionen von Python für jedes Projekt zu installieren und zu verwenden.

Unter Pipenv: A Guide to the New Python Packaging Tool gibt es eine englischsprachige Einführung.