Wird virtualenv für den Django-Produktionsserver empfohlen? [geschlossen]

77

Ich habe virtualenv immer zum Testen meiner App in localhost verwendet, da ich eine isolierte Umgebung habe und neue Versionen von Paketen sicher testen kann.

Jetzt ist es an der Zeit, dass ich meine App auf einem Produktionsserver bereitstellen muss. Ich frage mich, ob ich virtualenv auch für den Produktionsserver verwenden soll oder nur eine normale Installation. Da es sich um einen Produktionsserver handelt, kann ich immer die richtige Version verwenden, die ich auf dem Entwicklungsserver getestet habe (unter virtual-env).

w00d
quelle
3
Beachten Sie, dass in der offiziellen Django-Dokumentation die Verwendung von virtualenv in der Produktion erwähnt wird: docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/…
Paul D. Waite
Ich empfahl das Tutorial von @bartek Die schöne Einfachheit einer Nginx- und UWSGI-Bereitstellung
Sven Rojek
Heroku empfiehlt es: devcenter.heroku.com/articles/deploying-python
Ciro Santilli 13 冠状 病 六四 事件 13

Antworten:

48

Ich würde es so machen, wenn Sie jemals denken, dass Sie mehr als ein Projekt auf dem Webserver ausführen werden. Sobald Sie zwei Projekte haben, laufen Sie Gefahr, dass ein zukünftiges Upgrade eines Python-Pakets die andere Site beschädigt.

Kurt
quelle
1
Dies wirft die Frage auf, ob virtualenv verwendet werden soll, wenn Sie wissen, dass dieser Server nur für eine einzelne Anwendung vorhanden ist.
Eric Wilson
6
Sie können nicht garantieren, dass DevOps nichts einführt, das Python-Abhängigkeiten erfordert. Sollte jederzeit getrennt sein.
Aleksey Korzun
15

Wird virtualenv für den Django-Produktionsserver empfohlen?

Ja, Ihr Projekt hängt nicht von bestimmten Aspekten der Systemumgebung ab, und Sie können den Bereitstellungsprozess klarer und konfigurierbarer gestalten.

Ich verwende Fabric, Pip und Virtualenv, um alle meine Django-Projekte bereitzustellen.

Gregory Petukhov
quelle
Ich denke nicht, dass "unzuverlässig" das Wort ist, das Sie wollten (das System kann nicht von Ihrem Projekt abhängen?). Klare Sprache.
Chris Morgan
9

Ja, ich denke, Sie sollten virtualenv verwenden, um es in der Produktion bereitzustellen. Dies macht die Dinge für Sie viel einfacher und sauberer, insbesondere wenn Sie mehrere Dienste bereitstellen möchten, z. B. Django-basierte Websites oder andere Python-Projekte. Sie möchten nicht, dass jeder von ihnen die globale Python-Umgebung mit seinen Paketen verschmutzt.

Ich denke, virtualenv wird Ihnen helfen, alle Ihre Abhängigkeiten sauber zu verwalten.

Um Ihre Produktionsumgebung zu aktualisieren, müssen Sie lediglich Folgendes tun:

pip -r name_of_your_requirements_file.txt

Ich verwende virtuelle Umgebungen in der Produktion, und Sie können uWSGI verwenden, um die Anwendungen mit Cherokee als Webserver bereitzustellen.

Um Ihre virtuelle Umgebung in der Produktion zu verwenden, müssen Sie ihren Pfad zu Ihrem PYTHONPATH hinzufügen.

Wenn Ihre Umgebung beispielsweise den Pfad "/ home / www / my_project / env /" hat, lautet der hinzuzufügende Pfad:

/home/www/env/lib/python2.7/site-packages/

Sie können dies auf viele verschiedene Arten einrichten. Wenn Sie jedoch Ihre FCGI- oder uWSGI-Schnittstelle über manage.py generieren, fügen Sie einfach ganz oben in Ihrer manage.py Folgendes hinzu (vor dem Rest):

import os
my_virtualenv_path = "/home/www/my_project/env/lib/python2.7/site-packages/"
# Add it to your PYTHONPATH
os.path.append(my_virtualenv_path)

Sie können dies an Ihr Setup anpassen, für den Fall, dass Sie in der Shell auch Folgendes tun können:

export PYTHONPATH:$PYTHONPATH:/home/www/my_project/env/lib/python2.7/site-packages/

Sie müssen auch das Verzeichnis, das Ihre Datei settings.py enthält, zum PYTHONPATH hinzufügen, damit Django es erkennen kann. Gehen Sie dazu einfach ähnlich vor.

AaronO
quelle
3

In den meisten Fällen würde ich zustimmen, dass es am besten ist, eine virtuelle Umgebung zu haben, auch wenn es nicht so aussieht, als ob Sie sie benötigen, wenn Sie den Server zum ersten Mal einrichten. Das heißt, wenn Sie eine Art Cloud-Dienst verwenden und Server für eine bestimmte Aufgabe für eine kurze Zeit hochfahren, sehe ich keinen Sinn darin, eine virtuelle Umgebung zu verwenden.

Max Peterson
quelle
0

Die Verwendung von Docker-Containern sowohl für die Entwicklung als auch für die Bereitstellung in der Produktion ist mittlerweile sehr beliebt. Wenn Sie also überlegen, diesem Trend zu folgen, benötigen Sie keine virtuelle Umgebung mehr.

Dmitrii Mikhailov
quelle