Dient der Verwaltung virtueller Python-Environments und dient innerhalb dieser zur Verwaltung der Pakete und Auflösung von Abhängigkeiten.
Virtuelle Umgebungen erlauben es innerhalb der Umgebung eine festgelegte Python-Version
und definierte Versionen (unabhängig von der systemweiten Python-Installation) zu haben
verbessert die Verwaltung von Abhängigkeiten aller Pakete untereinander
nutzt intern env und pip
Arbeitsweise
es gibt eine zentrale Registry (per Default in '~/.local/share/virtualenv/Verzeichnisname+Hash/)
im eigentlichen Verzeichnis gibt es Pipfile → das enthält alle Pakete und Informationen zum Interpreter und darüber kann man die nötige Umgebung überall wieder erzeugen
Grundlegende/Wichtige Kommandos
Kommando | Beschreibung |
virtualenv shell | Wechselt in die virtuelle Umgebung des Verzeichnisses (man muss sich im Verzeichnis des Projektes befinden).
Existiert die Umgebung noch nicht wird sie erstellt.
Option | Beschreibung |
--python <Version>
| Gibt an welche Version des Interpreters für diese virtuelle Umgebung benutzt werden soll |
|
virtualenv --rm
| Löscht eine virtuelle Umgebung aus der Registrie.
Pipfile wird nicht gelöscht → man kann die Umgebung also wieder herstellen - muss ggf. händisch gelöscht werden wenn man es komplett weghaben will |
pipenv install <package> | Installiert ein bestimmtes Softwarepaket, allerdings nur für diese Umgebung.
Option | Beschreibung |
-e <URL externe Quelle>
| Installiert das Paket aus einer externen Quelle statt über PyPi |
Package==Version
| Funktioniert (sowie „<“ und „>“) wie bei pip und definiert das von einem bestimmten Paket eine bestimmte Version installiert werden soll |
--dev
| Speichert die Pakete als nur für „Entwicklungsumgebung“ benötigt ab.
Das macht Sinn für Pakete die nur für die Entwicklungsumgebung benötigt werden, aber nicht für produktiven Code (also zum Beispiel Unittest).
Man kann dann die Pakete woanders (andere Maschine) installieren per pipenv install –dev |
pip install --dev
| Installiert alle „normalen“ Pakete + alle die mit der Option „–dev“ installiert wurden. Darüber kann man die notwendigen Pakete laden die für eine „Entwicklungsumgebung“ notwendig sind |
|
pipenv check | Prüft die installierten Pakete auf neue? Abhängigkeiten und auf Sicherheitslücken (dazu wird die safety-Library des pyuopio-Projektes benutzt die Sicherheitslücken in vielen Python-Paketen verfolgen) genutzt und spielt entsprechend Updates ein |
pipenv uninstall | Deinstalliert Pakete (in der virtuellen Umgebung).
Option | Beschreibung |
--all
| Deinstalliert alle Pakete |
--all-dev
| Deinstalliert alle Pakete die mit --dev
installiert
|
|
pipenv --rm
| Löscht das virtuelle Environment (gemeint ist die Installation des Interpreters und der Pakete → für gewöhnlich in ~/.local/share/environments/).
Pipfile und Pipfile.lock bleiben erhalten. Dadurch lässt sich einfach durch aufrufen von pipenv und pipenv sync ein neues Environment erstellen |
Dateien
Pipfile
ist im Hauptverzeichnis des Projektes zu finden
enthält
Liste der Pakete die installiert werden müssen für die Umgebung
Liste der Pakete die installiert werden müssen um die Umgebung für die Entwicklung zu nutzen (das sind zusätzliche Pakete die nur für die Entwicklung benötigt werden)
Informationen welche Python-Version benötigt wird
enthält nur nur die Liste der installierten Pakete, aber nicht ihre Abhängigkeiten (also nicht die Pakete die installiert wurden um deren Abhängigkeiten zu befriedigen)
kann manuell editiert werden
Pipfile.lock
Datei für „reproduzierbare Builds“
entsteht aus Pipfile durch Aufruf von pipenv lock
enthält den gleichen Inhalt wie Pipfile
+ die genauen Versionen der installierten Pakete + die genauen Versionen der Abhängigkeiten
dadurch lässt sich auf einem anderen System genau die gleiche Umgebung (exakt mit den gleichen Versionen der Pakete) replizieren
.env
Troubleshooting
Problem | Lösung |
Python-Version ändern | Kann u.a. auch notwendig sein wenn man von einer Maschine auf eine andere portiert.
pipenv --rm
[requires]
python_version = "3.10"
Auf die gewünschte Python-Version ändern
pipenv
pipenv sync
|