Python virtualenv und venv tun und nicht tun

Eine der größten Attraktionen von Python ist das umfangreiche Ökosystem von Paketen von Drittanbietern. Wenn Sie eine Aufgabe erledigen möchten - Dateiformatkonvertierung, Scraping und Restrukturierung von Webseiten, lineare Regression, wie Sie es nennen -, besteht die Wahrscheinlichkeit, dass ein oder mehrere Pakete im Python-Paketindex Ihre Anforderungen erfüllen.

Der schwierige Teil besteht darin, die Anhäufung von Paketen in einer bestimmten Python-Installation zu verwalten. Es ist allzu einfach, Dutzende von Paketen gedankenlos zu installieren, und mit der Zeit entsteht eine Python-Umgebung, die mit Konflikten zwischen älteren und neueren Versionen von Tools behaftet ist, was die Arbeit schwieriger macht, als es sein muss.

Python wird mit einem automatisierten System geliefert, mit dem ein Paket für ein bestimmtes Python-Projekt lokal gehalten werden kann. Virtuelle Umgebungen - mit freundlicher Genehmigung des virtualenvTools in Python 2 und venvPython 3 - können verwendet werden, um eine separate, isolierte Instanz der Python-Laufzeit für ein Projekt mit einer eigenen Ergänzung von Paketen zu erstellen.

In diesem Artikel gehen wir auf einige der häufigsten Fehler ein, die Menschen machen - und Fallstricke, denen sie erliegen -, wenn sie mit virtuellen Umgebungen in Python arbeiten. 

Verwenden Sie virtuelle Python-Umgebungen 

Der erste häufige Fehler, den Python-Programmierer machen virtualenvoder der darin  venvbesteht, sich einfach nicht damit zu beschäftigen. Wenn Sie nur ein schnelles und schmutziges Skript zusammenstellen, um eine Kleinigkeit zu erledigen , warum sollten Sie dann überhaupt eine virtuelle Umgebung einrichten?

Das Problem ist, dass sich „eine Kleinigkeit“ oft als viel, viel mehr herausstellt. Wenn Sie Python besser beherrschen, werden Sie unweigerlich mehr Module von Drittanbietern hinzuziehen, um anspruchsvollere Arbeiten auszuführen. Darüber hinaus wird es immer schwieriger, mit Abhängigkeiten von früheren Versionen von Paketen umzugehen. Dies ist eines der Hauptprobleme, für deren Lösung virtuelle Umgebungen erstellt wurden.

Einige Leute rümpfen auch die Nase bei der Verwendung virtualenvoder  venvweil jede virtuelle Umgebung eine eigene kleine Kopie der Python-Laufzeit ist, die etwa 25 MB beansprucht. Aber Speicherplatz ist heutzutage lächerlich billig, und das Entfernen einer virtuellen Umgebung ist so einfach wie das Löschen ihres Verzeichnisses (keine Nebenwirkungen). Wenn Sie mehrere Aufgaben haben, die einen gemeinsamen Satz von Paketen gemeinsam nutzen, können Sie für beide immer dieselbe virtuelle Umgebung verwenden.

Verwenden Sie virtualenvwrapper, um virtuelle Python-Umgebungen zu verwalten

Eine Möglichkeit, virtuelle Umgebungen weniger belastend zu gestalten, ist die Verwendung  virtualenvwrapper. Mit diesem Tool können Sie alle virtuellen Umgebungen in Ihrem Arbeitsbereich über eine einzige zentrale Befehlszeilen-App verwalten.

Ein Tipp zur Erstellung einer virtuellen Umgebung: Benennen Sie nicht das Verzeichnis Ihrer virtuellen Umgebung  venvoder den Namen eines anderen Pakets, das Sie in der virtuellen Umgebung verwenden möchten. Dies kann später unvorhersehbare Auswirkungen auf Importe haben. Verwenden Sie einen Namen, der Ihr Projekt eindeutig beschreibt.

Platzieren Sie keine Projektdateien in einer virtuellen Python-Umgebung

Wenn Sie eine virtuelle Umgebung einrichten, soll das Verzeichnis, in dem sie sich befindet, nur die virtuelle Umgebung selbst enthalten. Ihr Projekt gehört in einen eigenen Verzeichnisbaum. Dafür gibt es viele gute Gründe:

  • Ihr Projektverzeichnisbaum hat möglicherweise eine Namenskonvention, die mit Elementen der virtuellen Umgebung kollidiert.
  • Der einfache Weg, eine virtuelle Umgebung zu entfernen, besteht darin, das Verzeichnis zu löschen. Wenn Sie Projektdateien mit der virtuellen Umgebung mischen, müssen Sie die beiden zuerst entwirren.
  • Mehrere Projekte können dieselbe virtuelle Umgebung verwenden.

Eine Möglichkeit, Dinge zu organisieren, besteht darin, ein Verzeichnis der obersten Ebene zu erstellen, das verschiedene virtuelle Umgebungen enthält, und ein anderes Verzeichnis der obersten Ebene, das Projekte enthält. Solange die beiden getrennt bleiben, ist das wichtig.

Vergessen Sie nicht, Ihre virtuelle Python-Umgebung zu aktivieren 

Ein weiterer häufiger Fehler, den Menschen mit virtuellen Umgebungen machen, besteht darin, zu vergessen, sie zu aktivieren, oder nicht die richtige zu aktivieren.

Bevor eine virtuelle Umgebung in einer bestimmten Shell-Sitzung verwendet werden kann, muss sie über ein im Verzeichnis der virtuellen Umgebung benanntes Skript aktiviert werden . Bei der Aktivierung wird die virtuelle Umgebung als Standard-Python-Instanz behandelt, bis Sie sie deaktivieren (indem Sie den Befehl ausführen).activateScriptsdeactivate

Es ist leicht, diesen Schritt zunächst zu vergessen, sowohl weil es eine Gewohnheit ist, die erworben werden muss, als auch weil das Aktivierungsskript eine Ebene tiefer im Verzeichnis der virtuellen Umgebung liegt. Ein paar Tricks sind hier nützlich:

  1. Erstellen Sie Verknüpfungen zu den Aktivierungs- / Deaktivierungsskripten im Stammverzeichnis Ihres Projekts. Sie können diese Verknüpfungen einfach benennen actund deactsie weniger unangenehm für die Eingabe machen.
  2. Erstellen Sie für Projekte, an denen Sie über eine IDE und nicht über eine Befehlszeile arbeiten, einen Projektstarter - eine Batchdatei oder ein Shell-Skript - für die betreffende Python-App. Auf diese Weise können Sie das Aktivierungsskript aufrufen und anschließend Ihr eigenes Skript ausführen. Im Allgemeinen müssen Sie die Skriptumgebung nach dem Ausführen nicht deaktivieren, da die Sitzung ohnehin von selbst beendet wird.

Dieser letzte Trick unterstreicht einen wichtigen Punkt bei der Aktivierung virtueller Umgebungen: Sie gelten nur für die Umgebungssitzung, in der sie ausgeführt werden. Wenn Sie beispielsweise zwei Befehlszeilensitzungen starten und eine virtuelle Umgebung in einer aktivieren, wird die andere Befehlszeilensitzung verwendet Die Standard-Python-Installation des Systems, nicht die virtuelle Umgebung. Sie aktivieren die virtuelle Umgebung nicht für das gesamte System , sondern nur für die jeweilige Sitzung.

Nicht  >=zum Fixieren von Paketversionen in einer virtuellen Python-Umgebung verwenden

Dieser Tipp ist auch außerhalb virtueller Umgebungen nützlich. Wenn Sie eine App mit einer requirements.txtDatei haben, sollten Sie Pakete mit einer genauen Versionsnummer angeben . Sag mypackage==2.2nicht mypackage>=2.2.

Hier ist der Grund. Einer der Hauptgründe für die Verwendung einer virtuellen Umgebung besteht darin, die Verwendung bestimmter Versionen von Paketen sicherzustellen. Wenn Sie >=stattdessen verwenden ==, gibt es keine Garantie dafür, dass Sie - oder eine andere Person - dieselbe Version erhalten, wenn die Umgebung für dieses Projekt neu erstellt werden muss. Verwenden Sie eine genaue Versionsnummer. Sie, eine Zukunft, die Sie und wer auch immer nach Ihnen kommt, werden es Ihnen danken.