2013-02-02 7 views
8

Ich habe in der virtuellen Umgebung gelesen, und es scheint wie ein extrem nützliches Werkzeug, aber jetzt frage ich mich, wie ich meine gesamte Python-Umgebung bisher eingerichtet habe. Gerade jetzt, alle Module und Pakete, die ich installiert haben, sind mit Wohnsitz in diesem Verzeichnis:Verstehen der virtuellen Umgebung für Python

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages 

Aber die virtualenv docs scheinen darauf hinzudeuten, dass eine solche universelle System installiert sind eine schlechte Sache. Wenn das der Fall ist, was soll ich mit meinen aktuellen Modulen tun und wie soll ich zukünftige Module installieren? Zum Beispiel habe ich kürzlich Flask aus meinem Benutzerverzeichnis mit diesem Befehl installiert:

pip install flask 

Es befindet sich jetzt in Site-Pakete. Hätte ich etwas anderes machen sollen? Ich habe Probleme mit der Dokumentation, die darauf hindeutet, dass ich in ein Projektverzeichnis gehen, eine virtuelle Umgebung einrichten und alle benötigten Module mit virtualenv installieren muss. Ist das der Fall? Gibt es eine Möglichkeit, die Dinge weniger umständlich zu machen? Es sieht so aus, als wäre die Installation von potenziell Dutzenden von Paketen für jedes einzelne Projektverzeichnis ein wenig viel.

Oder muss ich nur virtuelle Umgebungen für Projekte erstellen, die ältere Modulversionen verwenden als die, die ich im Systemverzeichnis installiert habe? Wenn das der Fall ist, was ist dann mit dem virtualenv Mantra los, das alle Systeminstallationen zu entmutigen scheint?

+1

Die weit verbreitete Ermutigung, virtualenv zu verwenden, ist wahrscheinlich eine Überlegung für Multiuser-Maschinen, in denen Systeminstallationen zu allen möglichen unbekannten Konsequenzen für andere Benutzer führen können. Es ist auch praktisch/vorsichtig, es pro-Projekt selbst zu verwenden, wenn Sie mit Paketversionen und so experimentieren. Schließlich können Sie Umgebungen exportieren, um anderen die Verwendung Ihrer Skripts zu erleichtern. –

+1

Darüber hinaus können Sie einen Blick auf virtualenvwrapper, die ein sehr mächtiges Werkzeug ist. Es ermöglicht Ihnen, alle Ihre virtuellen Umgebungen an einem Ort zu organisieren, zwischen ihnen zu wechseln und zu konfigurieren. – ScotchAndSoda

Antwort

13

Wenn Sie bereits wie folgt installiert virtualenv:

pip install virtualenv 

Sie werden dann einrichten möchten einen bestimmten Ordner virtualenv:

virtualenv [your project folder name] 

Dies wird das Projekt-Ordner mit ein paar wichtige erstellen Unterverzeichnisse.

Sie werden zuerst Ihren virtualenv aktivieren, bevor Sie etwas Neues installieren, die neu installierten Module werden Ihnen nur dann zur Verfügung stehen, wenn sie in Ihren virtualenv geladen werden. Von Ihrem Projekt Ordnertyp:

source bin/activate 

Sie werden dann Ihren virtualenv Namen in Klammern in jeder Terminallinie sehen. Dies zeigt an, dass Sie "Quelle" sind. JETZT installieren Sie Zeug mit Pip oder easy_install.

pip install flask 

virtualenv setzt im Grunde Ihre Pfad für ausführbare Dateien in [Venv Ordner]/bin suchen anstelle von/usr/local/bin oder was auch immer. So können Sie Dateien direkt in den Ordner "virtual env bin" kopieren. (MongoDB-Dateien zum Beispiel kommen nur in einer Zip/TAR-Datei, Sie können sie einfach in Ihren venv-bin-Ordner entpacken und Sie haben Zugriff auf diese bestimmte Version von MongoDB, wenn Sie 'Sourced' erhalten.) Versuchen Sie es selbst, führen Sie diesen Befehl aus Ihre virtuelle und dann Standardumgebung, um zu sehen, wie sie sich ändert.

echo $PATH && echo $PYTHONPATH 

verlassen aus Ihrer virtualenv:

deactivate 

das Sie zurück zu Ihrem Standardumgebung Typing erhalten.

Wenn Sie dies noch nicht gelesen haben, ist es eine ziemlich gute Ressource.

https://python-guide.readthedocs.org/en/latest/dev/virtualenvs/

+0

Macht Sinn, aber sollte ich dies für alle meine Projekte tun, oder nur diejenigen, die Abhängigkeiten haben, die mit Paketen kollidieren, die ich auf dem System installiert habe? Mit anderen Worten, sollte ich Systeminstallationen immer vermeiden, Site-Pakete im Wesentlichen leer lassen und Module/Pakete nur lokal mit virtualenv importieren? Wenn ja, gibt es eine andere Begründung als die Gefahr, Module zu aktualisieren, die nicht abwärtskompatibel sind? Gibt es eine Geschwindigkeitsüberlegung? – user1427661

+1

Soweit ich weiß, gibt es keine Auswirkungen auf die Verwendung von virtualenv. Wie ich bereits erwähnt habe, richtet es nur Ihre Umgebungsvariablen für Sie ein und erstellt einen neuen lib- und bin-Ordner. Es ist eine großartige Möglichkeit, um Ihre Projekte zu organisieren. Es ist auch eine gute Möglichkeit, Ihre gesamte Umgebung zu teilen. Wenn Sie Ihren virtualenv-Ordner init initialisieren, muss jeder, der ihn klont, nicht alle zusätzlichen Abhängigkeiten herunterladen. Sie sind genau dort in den Ordnern bin und lib. Sie müssen möglicherweise eine Bash-Datei schreiben, die es ihnen erlaubt, in sie hineinzuquellen, aber das ist trivial. Installieren Sie in Ihrem Standard-Env, wenn andere Apps Abhängigkeiten erfordern. –

0

Bevor Sie setzen/alles in der Produktion unterstützen gibt es minimal profitieren von einem virtualenv. Es ist nur ein zusätzlicher Schritt, um den virtualenv zu aktivieren, und natürlich musst du deine Standardumgebung in jedem virtualenv installieren ... nicht wirklich so viel extra Aufwand ...

Wenn du etwas in Produktion gebracht hast, ist es das möglicherweise ein großer Gewinn, wenn die Dinge in der Nacht stoßen :-)

Verwandte Themen