virtualenv vs. pipenv #395
Unanswered
frankystone
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Sorry for writing in german. If you need english please mention it.
Hallo, ich denke ich kann auf deutsch schreiben da alle an der Webseite beteiligten Entwickler zur Zeit aus Deutschland kommen.
Nach dem großartigen Upgrade durch SirVer befinden sich neue Dateien im repo, u.a.
Pipfile
undPipfile.lock
. Nach etwas herumsuchen fand ich heraus das diese Dateien vonpipenv
kommen.pipenv
ist die Weiter(?)entwicklung vonvirtualenv
und soll es wohl irgendwann ersetzenPipfile.lock
undPipfile
sind die Ersetzung fürpip_requirements.txt
(so wie ich das verstanden habe)Obwohl es möglich ist
virtualenv
undpipenv
gleichzeitig zu verwenden, denke ich wir sollten uns auf ein Werkzeug beschränken um Fehler zu vermeiden. Z.B. dependabot nutzt wohlpipenv
und verändert damit auch Pipfile.lock. Während ein manuelles Ausführen vonpip freeze
nichts anPipfile.lock
ändert. D.h.pip_requirements.txt
und die generierten Dateien vonpipenv
enthalten u.U. verschiedene Versionen von Paketen. Das heißt wiederum: Nutzt jemandpipenv
wird er andere Pakete installieren als jemand dervirtualenv
nutzt.virtualenvironment erzeugt mit
virtualenv
undpipenv
Die virtualenvironments (wo Pakete installiert werden) werden je nach Werkzeug woanders erzeugt:
~/virtualenv wlwebsite
: Hier entsteht das virtualenvironment direkt im Verzeichnis wlwebsite:pipenv
erstellt das virtualenvironment per default in~/.local/share/virtualenvs/
des Benutzers. Das heißt jeder der auf dem Server mit der webseite arbeitet hat sein eigenes virtualenvironment. Diese Voreinstellung lässt sich umgehen wenn man die Umgebungsvariable WORKON_HOME definiert. Man kann also ein ähnliches Verhalten wie mitvirtualenv
erreichen. So sähe der komplette Befehlssatz für die Installation der Webseite mitpipenv
aus:Der Nachteil ist das man die Umgebungsvariable u.U. immer wieder neu setzen muss, oder man trägt sie in die
~/.bash_profile
ein. Wenn man vergisst die Umgebungsvariable zu setzen, wird bei Aufruf vonpipenv shell
ein neues Virtualenvironment in~/.local/share/virtualenvs/
erstellt.pipenv oder virtualenv
Wie oben erwähnt sollten wir nur eines dieser beiden Werkzeuge benutzen. Bisher sind wir mit
virtualenv
ganz gut gefahren. Ich bin mir nicht sicher welche Vorteile, außer einer genaueren Paketversionsverwaltungpipenv
mit sich bringt.pipenv
ist in der Benutzung auf dem server etwas komplizierter (Umgebungsvariable). Auch müssten alle systemd services umgeschrieben werden.Meinungen?
Beta Was this translation helpful? Give feedback.
All reactions