Welche Art von Verzeichnisstruktur sollte man bei der Verwendung befolgen virtualenv
? Wenn ich beispielsweise eine WSGI-Anwendung erstellen und eine virtuelle Umgebung mit dem Namen erstellen foobar
würde, würde ich mit einer Verzeichnisstruktur wie der folgenden beginnen:
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
Wenn diese Umgebung einmal erstellt ist, wo würde man ihre eigene platzieren:
- Python-Dateien?
- statische Dateien (Bilder / etc)?
- "benutzerdefinierte" Pakete, wie sie online erhältlich sind, aber nicht im Käsegeschäft erhältlich sind?
in Bezug auf die virtualenv
Verzeichnisse?
(Angenommen, ich weiß bereits, wohin die Verzeichnisse von virtualenv selbst gehen sollen .)
python
project
virtualenv
Phillip B. Oldham
quelle
quelle
Antworten:
virtualenv
Bietet eine Python-Interpreter-Instanz, keine Anwendungsinstanz. Normalerweise würden Sie Ihre Anwendungsdateien nicht in den Verzeichnissen erstellen, die das Standard-Python eines Systems enthalten. Ebenso ist es nicht erforderlich, Ihre Anwendung in einem virtuellen Env-Verzeichnis zu suchen.Beispielsweise haben Sie möglicherweise ein Projekt, in dem mehrere Anwendungen dieselbe virtuelle Umgebung verwenden. Oder Sie testen eine Anwendung mit einer virtuellen Umgebung, die später mit einem System-Python bereitgestellt wird. Oder Sie packen möglicherweise eine eigenständige App, in der es möglicherweise sinnvoll ist, das Verzeichnis virtualenv irgendwo im App-Verzeichnis selbst zu haben.
Im Allgemeinen glaube ich nicht, dass es eine richtige Antwort auf die Frage gibt. Und das Gute daran
virtualenv
ist, dass es viele verschiedene Anwendungsfälle unterstützt: Es muss keinen richtigen Weg geben.quelle
virtualenvwrapper
) ist , wenn ich das zu bearbeitendepostactivate
undpostdeactivate
Haken.virtualenv
Verzeichnis getrennt zu halten , aber ein Vergleichvirtualenv
mit Systempython ist nicht hilfreich, da der Zweck darinvirtualenv
besteht, defekte Abhängigkeiten zu beheben und Projekte zu isolieren, damit sie verschiedene Paketversionen und sogar Pythonversionen verwenden können (mir ist klar, dass dies bereits geschrieben wurde) -python3). Zulassen von Anwendungen eines teilenvirtualenv
ist mit ,virtualenv
als ob es System Python war, Apps anfällig für die gleichen Probleme verlassen virtualenv ausgelegt ist zu lösen.There should be one obvious way to do it
;; logischerweise sollte das 1: 1 seinWenn Sie nur ab und zu nur wenige Projekte haben, hindert Sie nichts daran, für jedes eine neue virtuelle Umgebung zu erstellen und Ihre Pakete direkt darin abzulegen:
Der Vorteil dieses Ansatzes besteht darin, dass Sie immer sicher sein können, das Aktivierungsskript zu finden, das zum darin enthaltenen Projekt gehört.
Wenn Sie sich für eine etwas bessere Organisation entscheiden, sollten Sie in Betracht ziehen, alle Ihre virtuellen Umgebungen in einem Ordner abzulegen und sie nach dem Projekt zu benennen, an dem Sie arbeiten.
Auf diese Weise können Sie immer mit einer neuen virtuellen Umgebung beginnen, wenn etwas schief geht, und Ihre Projektdateien bleiben sicher.
Ein weiterer Vorteil ist, dass mehrere Ihrer Projekte dieselbe virtuelle Umgebung verwenden können, sodass Sie nicht immer wieder dieselbe Installation durchführen müssen, wenn Sie viele Abhängigkeiten haben.
Für Benutzer, die regelmäßig virtuelle Umgebungen einrichten und abbauen müssen, ist es sinnvoll, sich virtualenvwrapper anzusehen.
Mit virtualenvwrapper können Sie
Sie müssen sich keine Gedanken mehr darüber machen, wo sich Ihre virtuellen Umgebungen befinden, wenn Sie an den Projekten "foo" und "bar" arbeiten:
So fangen Sie an, am Projekt "foo" zu arbeiten:
Dann ist das Umschalten auf Projekt "Leiste" so einfach:
Ziemlich ordentlich, nicht wahr?
quelle
virtualenvwrapper
. Es abstrahiert die virtuelle Umgebung sauber und bietet Ihnen dennoch alle Vorteile.venv/
Verzeichnis auf derselben Ebene wie das des Projekts abBASE_DIR
.Da virtualenvs nicht verschiebbar sind, ist es meiner Meinung nach eine schlechte Praxis, Ihre Projektdateien in einem virtualenv-Verzeichnis abzulegen. Die virtuelle Umgebung selbst ist ein generiertes Entwicklungs- / Bereitstellungsartefakt (ähnlich einer .pyc-Datei), das nicht Teil des Projekts ist. Es sollte einfach sein, es wegzublasen und jederzeit neu zu erstellen oder ein neues auf einem neuen Bereitstellungshost usw. zu erstellen.
Tatsächlich verwenden viele Benutzer virtualenvwrapper , wodurch die tatsächlichen virtualenvs fast vollständig aus Ihrem Bewusstsein entfernt werden und standardmäßig alle nebeneinander in $ HOME / .virtualenvs platziert werden.
quelle
virtualenv --relocatable myvenv
siehe stackoverflow.com/a/6628642/1335793, nur weil Sie können, heißt das nicht, dass Sie es sollten.Wenn Sie Ihrem Projekt eine geben
setup.py
, kann pip es direkt aus der Versionskontrolle importieren.Mach so etwas:
Das
-e
Projekt wird eingefügtmyproject/src
, aber mit verknüpftmyproject/lib/pythonX.X/site-packages/
, sodass alle Änderungen, die Sie vornehmen, sofort in Modulen übernommen werden, die es von Ihrem lokalen Standort importierensite-packages
. Das#egg
Bit teilt pip mit, welchen Namen Sie dem Eierpaket geben möchten, das es für Sie erstellt.Wenn Sie nicht verwenden
--no-site-packages
, geben Sie sorgfältig an, dass pip mit der-E
Option in virtualenv installiert werden sollquelle