J'utilise VirtualEnv sur Windows XP. Je me demande si mon cerveau s'enroule correctement:
Iran virtualenv ENV
et il a créé C:\WINDOWS\system32\ENV
. J'ai ensuite changé ma variable PATH
pour inclure C:\WINDOWS\system32\ENV\Scripts
au lieu de C:\Python27\Scripts
. Ensuite, j'ai extrait Django into C:\WINDOWS\system32\ENV\Lib\site-packages\Django-trunk
, a mis à jour mon PYTHON_PATH
variable pour pointer le nouveau répertoire Django, et a continué à easy_install
d'autres choses (qui bien sûr vont dans mon nouveau C:\WINDOWS\system32\ENV\Lib\site-packages
répertoire).
Je comprends pourquoi je devrais utiliser VirtualEnv pour pouvoir exécuter plusieurs versions de Django et d'autres bibliothèques sur la même machine, mais cela signifie-t-il que pour basculer entre les environnements, je dois essentiellement changer mes PATH
et PYTHON_PATH
variable? Donc, je vais développer un Django projet qui utilise Django 1.2 dans un environnement appelé ENV
puis changer mon PATH
et tel que je puisse utiliser un environnement appelé ENV2
qui a la version dev de Django?
Est-ce fondamentalement ou existe-t-il une meilleure façon de faire automatiquement tout cela (je pourrais mettre à jour mon chemin d'accès en Python, mais cela nécessiterait que j'écrive du code spécifique à la machine dans mon application) ?
En outre, comment ce processus se compare-t-il à l'utilisation de VirtualEnv sur Linux (je suis tout à fait un débutant sous Linux).
Normalement, virtualenv
crée des environnements dans le répertoire courant. Sauf si vous avez l'intention de créer des environnements virtuels dans C:\Windows\system32
pour une raison quelconque, j'utiliserais un répertoire différent pour les environnements.
Vous ne devriez pas avoir besoin de jouer avec les chemins: utilisez le script activate
(dans <env>\Scripts
) pour garantir que l'exécutable et le chemin d'accès Python sont spécifiques à l'environnement. Une fois que vous avez fait cela, l'invite de commande change pour indiquer l'environnement. Vous pouvez alors simplement appeler easy_install et tout ce que vous voulez installer de cette façon sera installé dans cet environnement. Utilisez deactivate
pour tout remettre en l'état avant l'activation.
Exemple:
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>
Remarquez comment je n'ai pas eu besoin de spécifier un chemin pour deactivate
- activate
le fait pour vous, de sorte que lorsqu'il est activé, "Python" exécutera le Python dans virtualenv, pas dans votre système Python. (Essayez-le - faites un import sys; sys.prefix
et il devrait imprimer la racine de votre environnement.)
Vous pouvez simplement activer un nouvel environnement pour basculer entre les environnements/projets, mais vous devrez spécifier le chemin complet pour activate
afin qu'il sache quel environnement activer. Vous ne devriez jamais avoir besoin de jouer explicitement avec PATH ou PYTHONPATH.
Si vous utilisez Windows Powershell, vous pouvez profiter d'un wrapper . Sous Linux, le virtualenvwrapper
(le lien pointe vers un port de celui-ci vers Powershell) rend la vie avec virtualenv
encore plus facile.
Mise à jour: Pas incorrect, exactement, mais peut-être pas tout à fait dans l'esprit de virtualenv
. Vous pouvez adopter une approche différente: par exemple, si vous installez Django et tout ce dont vous avez besoin pour votre site dans votre virtualenv, alors vous pouvez travailler dans le répertoire de votre projet (où vous développez votre site) avec virtualenv activé. Parce qu'il a été activé, votre Python trouverait Django et tout ce que vous auriez facilement_installé dans l'environnement virtuel: et parce que vous 'travaillez dans votre répertoire de projet, vos fichiers de projet seraient également visibles pour Python.
Mise à jour supplémentaire: Vous devriez pouvoir utiliser pip
, distribute
au lieu de setuptools
, et tout simplement python setup.py install
avec virtualenv
. Assurez-vous simplement d'avoir activé un environnement avant d'y installer quelque chose.
Oui, fondamentalement, c'est ce que fait virtualenv, et c'est à cela que sert la commande activate
, à partir du doc ici :
activer le script
Dans un virtualenv nouvellement créé, il y aura un script shell bin/activate ou un fichier batch Scripts/activate.bat sous Windows.
Cela changera votre $ PATH pour pointer vers le répertoire bin/virtualenv. Contrairement à workingenv, c'est tout ce qu'il fait; c'est une commodité. Mais si vous utilisez le chemin complet comme/path/to/env/bin/python script.py, vous n'avez pas besoin d'activer l'environnement en premier. Vous devez utiliser la source car elle modifie l'environnement sur place. Après avoir activé un environnement, vous pouvez utiliser la fonction désactiver pour annuler les modifications.
Le script d'activation modifiera également votre invite de shell pour indiquer quel environnement est actuellement actif.
vous devez donc simplement utiliser la commande activate
qui fera tout cela pour vous:
> \path\to\env\bin\activate.bat
sous Windows, j'ai python 3.7 installé et je ne pouvais toujours pas activer virtualenv
depuis Gitbash avec ./Scripts/activate
même si cela fonctionnait depuis Powershell après avoir exécuté Set-ExecutionPolicy Unrestricted
dans Powershell et en modifiant le paramètre sur "Oui à tous".
Je n'aime pas Powershell et j'aime utiliser Gitbash, donc pour activer virtualenv
dans Gitbash, accédez d'abord à votre dossier de projet, utilisez ls
pour lister le contenu du dossier et assurez-vous de voir "Scripts". Changez le répertoire en "Scripts" en utilisant cd Scripts
, une fois dans le chemin "Scripts", utilisez . activate
pour activer virtualenv
. N'oubliez pas l'espace après le point.
dans mon fichier de projet wsgi.py j'ai ce code (il fonctionne avec virtualenv, Django, Apache2 dans windows et 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()
dans le fichier virtualhost conf j'ai
<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>