Wo sollen virtuelle Umgebungen erstellt werden?

106

Ich bin verwirrt, wo ich meine virtuellen Envs ablegen soll.

Bei meinem ersten Django-Projekt habe ich das Projekt mit dem Befehl erstellt

django-admin.py startproject djangoproject

Ich habe dann in das Verzeichnis djangoproject cd'd und den Befehl ausgeführt

virtualenv env

Dadurch wurde das Verzeichnis der virtuellen Umgebung auf derselben Ebene wie das innere djangoprojectVerzeichnis erstellt.

Ist dies der falsche Ort, um die virtuelle Umgebung für dieses bestimmte Projekt zu erstellen?

Ich habe den Eindruck, dass die meisten Leute alle ihre virtuellen Envs in einem völlig anderen Verzeichnis zusammenhalten, z. B. ~/virtualenvsund dann mit virtualenvwrapper zwischen ihnen hin und her wechseln.

Gibt es einen richtigen Weg, dies zu tun?

Strahl
quelle

Antworten:

128

Viele Benutzer verwenden das Tool virtualenvwrapper , mit dem alle virtualenvs am selben Ort (im ~/.virtualenvsVerzeichnis) gespeichert werden und Verknüpfungen zum Erstellen und Speichern dort verwendet werden können. Zum Beispiel könnten Sie Folgendes tun:

mkvirtualenv djangoproject

und dann später:

workon djangoproject

Es ist wahrscheinlich eine schlechte Idee, das Verzeichnis virtualenv im Projekt selbst zu belassen, da Sie es nicht verteilen möchten (es ist möglicherweise spezifisch für Ihren Computer oder Ihr Betriebssystem). Behalten Sie stattdessen eine request.txt-Datei mit pip :

pip freeze > requirements.txt

und verteilen das. Auf diese Weise können andere Benutzer Ihres Projekts dieselben Anforderungen in ihre virtuelle Umgebung neu installieren:

pip install -r requirements.txt
David Robinson
quelle
schön, ich hatte noch nie in die Pip-Sachen geschaut, aber wenn ich eines Tages brauche, wird dies nützlich sein
Joran Beasley
pip ist in der Django-Community sehr beliebt und sehr einfach zu bedienen.
David Robinson
Danke David, das habe ich mir gedacht. Ich wusste über die Anforderungssache Bescheid und mache das. Ich war mir einfach nicht sicher, wohin das Venv gehen sollte. Ihr Kommentar, dass es betriebssystemspezifisch ist, ist eine gute Rechtfertigung dafür, das zu tun, was Sie vorschlagen.
Ray
Ist es möglich, eine virtuelle Umgebung nach ihrer Erstellung zu verschieben? Ich habe es unwissentlich in mein Projektverzeichnis aufgenommen
James Wierzba
6
Keine gute Rechtfertigung IMO. Ist das nicht was für .gitignore ist?
Josh Noe
24

Durch Ändern des Speicherorts des Verzeichnisses virtualenv wird es beschädigt

Dies ist ein Vorteil, wenn Sie das Verzeichnis außerhalb des Repository-Baums platzieren, z . B. unter ~/.virtualenvsmit virutalenvwrapper.

Andernfalls wird durch Verschieben des Projektstandorts die virtuelle Umgebung beschädigt, wenn Sie sie im Projektbaum behalten.

Siehe: Umbenennen eines virtualenv-Ordners, ohne ihn zu beschädigen

Es gibt --relocatableaber es ist bekanntlich nicht perfekt.

Ein weiterer kleiner Vorteil: Sie müssen es nicht .gitignore.

Die Vorteile des Einfügens in den Projektbaum selbst sind:

  • hält verwandte Dinge eng zusammen.
  • Sie werden eine bestimmte virtuelle Umgebung wahrscheinlich nie projektübergreifend wiederverwenden, sodass es keinen großen Vorteil bringt, sie an einem anderen Ort zu platzieren
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
quelle
3
Dies ist das einzige vernünftige Argument, das ich für das Erstellen von virtuellen Env-Ordnern außerhalb von Projektbäumen gesehen habe! Andere Richtlinien scheinen das Dogma der Zentralisierung nur zu wiederholen, als wäre es von Natur aus eine bewährte Methode anstelle eines unglücklichen Kompromisses, da virtuelle Umgebungen grundlegend gebrochen sind (wenn auch recht nützlich!).
Rob3c
Es tut mir leid, dass mir etwas nicht klar ist. Empfehlen Sie also, es im Projektbaum zu erstellen und es dann zu "gitignieren" oder in den ~ / .virtualenvs zu erstellen? Worauf bezieht sich "Wenn das nicht wäre"?
Aderchox
1
@aderchox gibt es einen Kompromiss: Legen Sie es in den Projektbaum und es bewegt sich Baum, den Sie neu installieren müssen, oder setzen Sie es auf ~, aber verwalten Sie auf einem zusätzlichen Unterverzeichnis außerhalb des Projekts.
Ciro Santilli 法轮功 冠状 病 六四 事件 13
5

Der allgemein akzeptierte Ort, an dem sie abgelegt werden, ist derselbe Ort, an dem sie bei der Standardinstallation von virtualenvwrapper abgelegt werden: ~/.virtualenvs

Verwandte Themen: virtualenvwrapper ist ein hervorragendes Tool, das Abkürzungen für die allgemeinen virtualenv-Befehle bereitstellt. http://www.doughellmann.com/projects/virtualenvwrapper/

Emmett Butler
quelle
0

Wenn Sie verwenden pyenv install Python, ist pyenv-virtualenv eine bewährte Methode . Wenn die .python-versionDatei festgelegt ist, kann sie die virtuelle Umgebung automatisch aktivieren oder deaktivieren, wenn Sie den Arbeitsordner ändern. Pyenv-virtualenvLegen Sie auch alle virtuellen Umgebungen in einen $HOME/.pyenv/versionsOrdner.

Aston
quelle
0

Aus meiner persönlichen Erfahrung würde ich empfehlen, alle virtuellen Umgebungen in einem einzigen Verzeichnis zu organisieren. Es sei denn, jemand hat einen extrem scharfen Speicher und kann sich Dateien / Ordner merken, die über das Dateisystem verstreut sind. Kein großer Fan von anderen Tools, nur um virtuelle Umgebungen zu verwalten. Wenn ich in VSCode das python.venvPathVerzeichnis configure ( ) konfiguriere, das alle virtuellen Umgebungen enthält, kann es automatisch alle erkennen.

Tejas Sarade
quelle