Virtualenv und Versionskontrolle

83

Ich habe kürzlich ein Django-Projekt gestartet und schnell erkannt, dass virtualenv aus vielen Gründen wirklich nützlich sein wird. Ich habe die virtuelle Umgebung und mein Projekt eingerichtet, aber jetzt frage ich mich, welche Datei ich meiner Quellcodeverwaltung hinzufügen soll (in meinem Fall Mercurial). Soll ich alle Dateien unter dem Ordner venv hinzufügen? Wie stelle ich sicher, dass ein Kollege klonen und sofort mit der Arbeit beginnen kann, ohne die Umgebung erneut einrichten zu müssen?

Martin
quelle
18
Ich würde nicht empfehlen, die virtuelle Umgebung unter die Quellcodeverwaltung zu stellen - sie kann nicht auf Python-Versionen, Betriebssysteme oder 32/64-Bit-Plattformen übertragen werden. Verwenden Sie stattdessen einfach ~/path/to/virtualenv/bin/pip freeze > ~/path/to/repo/requirements.txt. Andere Entwickler müssen ihre eigene virtuelle Umgebung einrichten, aber es sind buchstäblich zwei Befehle - virtualenv ~/path/to/env, ~/path/to/env/bin/pip install -r ~/path/to/requirements.txt.
AdamKG
1
Lieber Googler, siehe auch: stackoverflow.com/a/6012590/82216
sampablokuper

Antworten:

106

Sie generieren (normalerweise requirements.txt) eine "Anforderungs" -Datei , die Sie mit Ihrem Projekt festschreiben:

pip freeze > requirements.txt

Anschließend richtet jeder Entwickler seine eigene virtuelle Umgebung ein und führt Folgendes aus:

pip install -r requirements.txt
Chris Pratt
quelle
6

All diese Umgebungsprobleme treten häufig auf, wenn Sie Python / Django entwickeln! Ich habe all diese Probleme durchlaufen und einige Lösungen getestet! Dinge, die ich getestet habe:

  1. Projekt läuft lokal
  2. Projekt läuft in virtualenv
  3. Projekt läuft in einer VM
  4. Projekt, das in einer VM mit Vagrant ausgeführt wird

Die beste Lösung, die ich gefunden habe, war # 4! Da die Firma, in der ich früher gearbeitet habe, hat jede Person im Team ein anderes Betriebssystem, alle Arten von Windows, Mac und Linux, und es braucht Zeit, um alle Abhängigkeiten für jede Umgebung zu installieren! Also haben wir uns entschlossen, virtualenv auszuprobieren, was wirklich gut ist! Trotzdem muss jede Person ihre eigene Umgebung einrichten. Das Problem in virtualenv ist, dass sich alle Python-Quellen in der von Ihnen erstellten Umgebung befinden! Ich würde diese Dateien also nicht an eine Quellversionskontrolle senden! Die beste Lösung war # 4, denn genau das brauchte ich. Vagrant verwendet Chef, um Ihre Umgebung einzurichten. Sie müssen also nur einige Rezepte schreiben und Vagrant sie für Sie ausführen lassen! Dann senden Sie diese Rezepte an SCM. Wenn die nächste Person die Dateien von SCM erhält und die VM neu lädt, werden alle Abhängigkeiten automatisch installiert!

Ich habe einen Blog-Beitrag, in dem mehr über das Thema erklärt wird, und ich habe ein Django Blank-Projekt in Github erstellt, damit Sie mithilfe von Vagrant einen Startpunkt für Ihr Projekt erhalten.

http://arthurnn.com/blog/2011/11/25/easy-django-quickstart/ (Link nicht mehr aktiv, also mit Wayback Machine verknüpft)

BEARBEITEN

Die Lösung von Chris Pratt ist ebenfalls gut, jedoch sind einige Bibliotheken nicht so einfach in allen Betriebssystemen zu installieren. Beispielsweise haben viele Mac-Benutzer Probleme, wenn sie MySQLdb-python installieren möchten. Das ist eine wirklich verbreitete Bibliothek, aber wenn jeder in Ihrem Team Zeit damit verbringen muss, diese Probleme zu lösen, ist das überhaupt nicht gut!

Arthur Neves
quelle
MySQLdb-pythonDies ist ein guter Grund, eine vollständige Umgebung zu verwenden. Kann dies jedoch nicht auch mit pip / require.txt erreicht werden?
Kbuilds