it-swarm.com.de

Python virtualenv fragen

Ich verwende VirtualEnv unter Windows XP. Ich frage mich, ob mein Gehirn es richtig umwickelt hat:

Ich habe virtualenv ENV Ausgeführt und es wurde C:\WINDOWS\system32\ENV Erstellt. Ich habe dann meine PATH -Variable so geändert, dass sie C:\WINDOWS\system32\ENV\Scripts Anstelle von C:\Python27\Scripts Enthält. Dann habe ich Django in C:\WINDOWS\system32\ENV\Lib\site-packages\Django-trunk Ausgecheckt, meine PYTHON_PATH - Variable aktualisiert, um auf das neue Django) - Verzeichnis zu verweisen, und fuhr fort zu easy_install anderen Dingen (die natürlich in mein neues C:\WINDOWS\system32\ENV\Lib\site-packages - Verzeichnis gehen).

Ich verstehe, warum ich VirtualEnv verwenden sollte, damit ich mehrere Versionen von Django und anderen Bibliotheken auf demselben Computer ausführen kann. Bedeutet dies jedoch, dass ich zum Wechseln zwischen Umgebungen grundsätzlich mein PATH und PYTHON_PATH Variable? Also gehe ich von der Entwicklung eines Django Projektes, das Django 1.2 in einer Umgebung namens ENV verwendet und ändere dann mein PATH und so, dass ich eine Umgebung namens ENV2 verwenden kann, die die Dev-Version von Django hat?

Ist das im Grunde genommen so, oder gibt es eine bessere Möglichkeit, dies alles automatisch zu erledigen? (Ich könnte meinen Pfad in Python Code aktualisieren, aber dafür müsste ich maschinenspezifischen Code in meine Anwendung schreiben.) ?

Wie verhält sich dieser Prozess im Vergleich zur Verwendung von VirtualEnv unter Linux (ich bin ein Anfänger in Linux)?.

50
orokusaki

Normalerweise erstellt virtualenv Umgebungen im aktuellen Verzeichnis. Sofern Sie nicht beabsichtigen, aus irgendeinem Grund virtuelle Umgebungen in C:\Windows\system32 Zu erstellen, würde ich ein anderes Verzeichnis für Umgebungen verwenden.

Sie sollten sich nicht mit Pfaden herumschlagen müssen: Verwenden Sie das Skript activate (in <env>\Scripts), Um sicherzustellen, dass die ausführbare Datei Python=) und der Pfad umgebungsspezifisch sind. Sobald Sie dies getan haben, ändert sich der Befehl Eingabeaufforderung, um die Umgebung anzuzeigen. Sie können dann einfach easy_install aufrufen und alles, was Sie auf diese Weise installieren, wird in dieser Umgebung installiert. Verwenden Sie deactivate, um alles auf den ursprünglichen Zustand zurückzusetzen vor der Aktivierung.

Beispiel:

c:\Temp>virtualenv myenv
New python executable in myenv\Scripts\python.exe
Installing setuptools..................done.
c:\Temp>myenv\Scripts\activate
(myenv) C:\Temp>deactivate
C:\Temp>

Beachten Sie, dass ich für deactivate keinen Pfad angeben musste - activate das für Sie erledigt, sodass "Python" bei Aktivierung Python) ausführt in der virtuellen Umgebung, nicht in Ihrem System-Python. (Probieren Sie es aus - machen Sie einen import sys; sys.prefix und es sollte das Stammverzeichnis Ihrer Umgebung ausgeben.)

Sie können einfach eine neue Umgebung aktivieren, um zwischen Umgebungen/Projekten zu wechseln. Sie müssen jedoch den gesamten Pfad für activate angeben, damit Sie wissen, welche Umgebung aktiviert werden soll. Sie sollten sich niemals explizit mit PATH oder PYTHONPATH anlegen müssen.

Wenn Sie Windows PowerShell verwenden, können Sie einen Wrapper verwenden. Unter Linux macht das virtualenvwrapper (der Link zeigt auf einen Port von diesem zu Powershell) das Leben mit virtualenv noch einfacher.

Update: Nicht genau falsch, aber vielleicht nicht ganz im Sinne von virtualenv. Sie könnten einen anderen Weg einschlagen: Wenn Sie beispielsweise Django und alles, was Sie für Ihre Site benötigen, in Ihrer virtuellen Umgebung installieren, könnten Sie in Ihrem Projektverzeichnis (in dem Sie Ihre entwickeln) arbeiten site) mit aktiviertem virtualenv. Weil es aktiviert wurde, würde Ihr Python Django= und alles andere finden, was Sie einfach in die virtuelle Umgebung installiert hätten: und weil Sie Wenn Sie in Ihrem Projektverzeichnis arbeiten, sind Ihre Projektdateien auch für Python sichtbar.

Weiteres Update: Sie sollten pip, distribute anstelle von setuptools und verwenden können einfach nur python setup.py install mit virtualenv. Stellen Sie einfach sicher, dass Sie eine Umgebung aktiviert haben, bevor Sie etwas darin installieren.

93
Vinay Sajip

Ja, im Grunde ist es das, was virtualenv macht, und dafür ist der Befehl activate aus dem Dokument hier :

aktiviere das Skript

In einer neu erstellten virtuellen Umgebung befindet sich ein Shell-Skript bin/activate oder eine Batch-Datei Scripts/activate.bat unter Windows.

Dadurch wird Ihr $ PATH so geändert, dass er auf das Verzeichnis virtualenv bin/verweist. Im Gegensatz zu workingenv ist dies alles, was es tut; Es ist eine Annehmlichkeit. Wenn Sie jedoch den vollständigen Pfad wie/path/to/env/bin/python script.py verwenden, müssen Sie die Umgebung nicht zuerst aktivieren. Sie müssen source verwenden, da dies die Umgebung an Ort und Stelle verändert. Nach dem Aktivieren einer Umgebung können Sie mit der Funktion Deaktivieren die Änderungen rückgängig machen.

Das Aktivierungsskript ändert auch Ihre Shell-Eingabeaufforderung, um anzuzeigen, welche Umgebung derzeit aktiv ist.

verwenden Sie einfach den Befehl activate, der alles für Sie erledigt:

> \path\to\env\bin\activate.bat
6
mouad

unter Windows habe ich python 3.7 installiert und ich konnte virtualenv von Gitbash mit ./Scripts/activate immer noch nicht aktivieren, obwohl es nach dem Ausführen von Set-ExecutionPolicy Unrestricted in Powershell und ändern Sie die Einstellung auf "Yes To All".

Ich mag Powershell nicht und benutze gerne Gitbash. Um virtualenv in Gitbash zu aktivieren, navigieren Sie zunächst zu Ihrem Projektordner. Verwenden Sie ls, um den Inhalt des Ordners aufzulisten, und vergewissern Sie sich, dass Sie ihn sehen "Skripte". Wechseln Sie mit cd Scripts In das Verzeichnis "Scripts". Wenn Sie sich im Pfad "Scripts" befinden, aktivieren Sie mit . activatevirtualenv. Vergessen Sie nicht das Leerzeichen nach dem Punkt.

2
Presh Onyee

in meinem Projekt wsgi.py Datei habe ich diesen Code (es funktioniert mit virtualenv, Django, Apache2 in Windows und python 3.4)

import os
import sys
Django_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')
sys.path.append(Django_PATH)
sys.path.append('c:/myproject/env/Scripts')
sys.path.append('c:/myproject/env/Lib/site-packages')
activate_this = 'c:/myproject/env/scripts/activate_this.py'
exec(open(activate_this).read())
from Django.core.wsgi import get_wsgi_application
os.environ.setdefault("Django_SETTINGS_MODULE", "myproject.settings")
application = get_wsgi_application()

in virtualhost file conf habe ich

<VirtualHost *:80>
    ServerName mysite
    WSGIScriptAlias / c:/myproject/myproject/myproject/wsgi.py
    DocumentRoot c:/myproject/myproject/
    <Directory  "c:/myproject/myproject/myproject/">
       Options +Indexes +FollowSymLinks +MultiViews
       AllowOverride All
      Require local
   </Directory>
</VirtualHost>