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 * pip selbst löst zwar Abhängigkeiten auf, kann dabei aber Abhängigkeiten von bereits installierten Paketen beschädigen (wenn zum Beispiel ein installiertes Paket eine Abhängigkeit zu einer bestimmten Version eines anderen Paketes hat) * 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 |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 |Installiert ein bestimmtes Softwarepaket, allerdings nur für diese Umgebung. ^Option ^Beschreibung ^ |-e |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 ===== * Enthält environment-Variablen * wird gelesen wenn man pipenv shell ausführt ===== Troubleshooting ===== ^Problem ^Lösung ^ |Python-Version ändern |Kann u.a. auch notwendig sein wenn man von einer Maschine auf eine andere portiert. \\ \\ * Virtuelle Umgebung (die installierten Pakete usw. (die befinden sich in der Regel in ~./local/share/environments) löschen pipenv --rm * im Pipfile [requires] python_version = "3.10" Auf die gewünschte Python-Version ändern * Environment neu-installieren pipenv * Pakete neuinstallieren pipenv sync |