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:
Python.org –> venv
Real Python –> Pyenv
Hinweis
Seit SmartHomeNG v1.10 wird der Betrieb von SmartHomeNG in virtuellen standardmäßig unterstützt und empfohlen (siehe auch Komplettanleitung).
Eine ausführlichere Beschreibung zur Unterstützung virtueller Environments in SmartHomeNG ist in der Referenz zu finden.
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.