Das Speichern des virtualenv-Verzeichnisses innerhalb von Git ermöglicht es Ihnen, die gesamte App einfach durch ein Git-Clonen bereitzustellen (zusätzlich zur Installation und Konfiguration von Apache/mod_wsgi), wie Sie bemerkt haben. Ein potenziell signifikantes Problem bei diesem Ansatz ist, dass unter Linux der vollständige Pfad im Aktivierungs-, django-admin.py-, easy_install- und pip-Skript des venvs fest codiert wird. Dies bedeutet, dass Ihr virtualenv nicht vollständig funktionieren wird, wenn Sie einen anderen Pfad verwenden möchten, vielleicht um mehrere virtuelle Hosts auf demselben Server auszuführen. Ich denke, die Website könnte tatsächlich mit den falschen Pfaden in diesen Dateien funktionieren, aber Sie würden Probleme haben, wenn Sie das nächste Mal versuchen, Pip auszuführen.
Die bereits gegebene Lösung besteht darin, genügend Informationen in Git zu speichern, sodass Sie während des Deployments das virtualenv erstellen und die erforderlichen Pip-Installationen durchführen können. Normalerweise führen die Leute pip freeze
aus, um die Liste zu erhalten, und speichern sie dann in einer Datei mit dem Namen requirements.txt. Sie kann mit pip install -r requirements.txt
geladen werden. RyanBrady hat bereits gezeigt, wie Sie die Deploy-Anweisungen in einer einzigen Zeile aneinander reihen können:
# vor 15.1.0
virtualenv --no-site-packages --distribute .env &&\
source .env/bin/activate &&\
pip install -r requirements.txt
# nach der Veraltung einiger Argumente in 15.1.0
virtualenv .env && source .env/bin/activate && pip install -r requirements.txt
Persönlich lege ich diese einfach in ein Shell-Skript, das ich nach dem Git-Clonen oder Git-Pull ausführe.
Das Speichern des virtualenv-Verzeichnisses macht es auch etwas schwieriger, Pip-Upgrades zu handhaben, da Sie die aus dem Upgrade resultierenden Dateien manuell hinzufügen/entfernen und committen müssen. Mit einer requirements.txt-Datei ändern Sie einfach die entsprechenden Zeilen in requirements.txt und führen erneut pip install -r requirements.txt
aus. Wie bereits erwähnt, reduziert dies auch das "Commit-Spamming".