windows - Python virtualenv spørgsmål

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger VirtualEnv på Windows XP. Jeg undrer mig over, om jeg har min hjerne indpakket rundt det korrekt.


Jeg løb virtualenv ENV og det skabte C:WINDOWSsystem32ENV. Jeg ændrede så min PATH variabel til at omfatte C:WINDOWSsystem32ENVScripts i stedet for C:Python27Scripts. Så checkede jeg Django ud i C:WINDOWSsystem32ENVLibsite-packagesdjango-trunk, opdaterede min PYTHON\_PATH variabel til at pege på den nye Django-mappe og fortsatte easy\_install andre ting (som naturligvis går ind i min nye C:WINDOWSsystem32ENVLibsite-packages]] mappe).


Jeg forstår hvorfor jeg skal bruge VirtualEnv, så jeg kan køre flere versioner af Django og andre biblioteker på samme maskine, men betyder det, at for at skifte mellem miljøer skal jeg grundlæggende ændre min PATH og PYTHON\_PATH variabel? Så jeg går fra at udvikle et Django-projekt, der bruger Django 1.2 i et miljø kaldet ENV og derefter ændre min PATH og sådan, så jeg kan bruge et miljø kaldet ENV2, som har dev version af Django?


Er det dybest set det, eller er der en bedre måde at automatisk gøre alt dette (jeg kunne opdatere min vej i Python-kode, men det ville kræve, at jeg skriver maskinspecifik kode i min ansøgning)?


Også hvordan sammenligner denne proces med at bruge VirtualEnv på Linux (jeg er helt nybegynder på Linux).

Bedste reference


Normalt virtualenv opretter miljøer i den aktuelle mappe. Medmindre du har til hensigt at oprette virtuelle miljøer i C:Windowssystem32 af en eller anden grund, ville jeg bruge en anden mappe til miljøer.


Du skal ikke rote med stier: brug scriptet activate (i <env>Scripts) for at sikre, at Python eksekverbar og sti er miljøspecifik. Når du har gjort det, ændrer kommandoprompten at angive miljøet. Du kan så bare påberåbe easy\_install, og hvad du installerer på denne måde, vil blive installeret i dette miljø. Brug deactivate for at indstille alt tilbage til, hvordan det var før aktivering.


Eksempel:


c:Temp>virtualenv myenv
New python executable in myenvScriptspython.exe
Installing setuptools..................done.
c:Temp>myenvScriptsactivate
(myenv) C:Temp>deactivate
C:Temp>


Bemærk, at jeg ikke har brug for at angive en sti til deactivate - activate gør det for dig, så når du aktiverer 'Python', kører Python i virtualenv, ikke dit system Python. det - gør en import sys; sys.prefix, og det skal skrive roden til dit miljø.)


Du kan bare aktivere et nyt miljø for at skifte mellem miljøer/projekter, men du skal angive hele stien til activate, så det ved, hvilket miljø der skal aktiveres. Du skulle aldrig skulle rod med PATH eller PYTHONPATH eksplicit.


Hvis du bruger Windows Powershell, kan du drage fordel af en wrapper. På Linux, gør virtualenvwrapper (linket til en port af dette til Powershell) et endnu lettere liv med virtualenv. [38]


Opdatering: Ikke forkert, præcis, men måske ikke helt i virtualenv ånd. Du kan tage en anden tak. Hvis du f.eks. Installerer Django og alt andet du behøver for dit websted i din virtualenv, kan du arbejde i din projektmappe (hvor du udvikler dit websted) med virtualenv-aktiveret. Fordi det blev aktiveret, ville din Python finde Django og alt andet du nemt installerede i det virtuelle miljø: og fordi du arbejder i din projektmappe, vil dine projektfiler også være synlige for Python.


Yderligere opdatering: Du skal kunne bruge pip, distribute i stedet for setuptools og bare python setup.py install med virtualenv. Bare sørg for at du har aktiveret et miljø, før du installerer noget i det.

Andre referencer 1


Ja stort set er det hvad virtualenv gør, og det her er kommandoen activate til, fra doc her: [39]



  aktiver script

  
  I en nyoprettet virtualenv der
  vil være en bin/aktiver shell shell,
  eller en Scripts/activ.bat batch-fil
  på Windows.

  
  Dette ændrer din $ PATH til
  pege på virtualenv bin/
  vejviser. I modsætning til workingenv er dette
  alt det gør; det er en bekvemmelighed
  hvis du bruger den komplette sti som
  /path/to/env/bin/python script.py dig
  behøver ikke at aktivere
  miljø først. Du skal bruge
  kilde fordi det ændrer
  miljø på stedet. Efter aktivering
  et miljø, du kan bruge
  funktion deaktiver for at fortryde
  ændringer.

  
  Aktiver scriptet vil også ændre
  din shell prompt til at angive hvilket
  miljøet er i øjeblikket aktivt.



så du skal bare bruge kommandoen activate, som vil gøre alt det for dig:


> path	oenvinactivate.bat

Andre referencer 2


i mit projekt wsgi.py fil jeg har denne kode (det virker med virtualenv, django, apache2 i windows og 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()


I virtualhost-fil konfronterer jeg


<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>