Comment virtualenv travail?
J'ai vérifié le activer script, et il me semble tout ce qu'il fait est:
- ensemble VIRTUAL_ENV env
- ajouter $VIRTUAL_ENV/bin avant de CHEMIN
Comment virtualenv
fournir magique environnement virtuel par ces? Que dois-je manquer?
- Ne pas oublier virtualenv burrito
Vous devez vous connecter pour publier un commentaire.
Je vais décrire les processus de base, de qui j'ai appris à partir de la présentation @jcollado liés à.
Quand Python commence, il regarde le chemin du binaire, et les préfixes de celle-ci.
Donc, disons que votre virtualenv est
/home/blah/scratch
. Le Python processus d'sait qu'il a été exécuté à partir/home/blah/scratch/bin/python
(ce qui est généralement juste une copie de votre système de python binaire/usr/bin/python
) et il sait que son propre versionX.Y
parce qu'elle est compilée en elle. Ensuite Python recherche pourlib/pythonX.Y/os.py
dans cet ordre:Il s'arrête à
/home/blah/scratch/lib/pythonX.Y/os.py
parce que c'est le premier fichier qui existe réellement. Si elle n'a pas, Python serait de les garder à la recherche. Il définit ensuitesys.prefix
sur cette base. Il utilise un procédé similaire à définirsys.exec_prefix
, puissys.path
est construit sur la base de ces.X.X
est dérivé de la version de Python, donc ça va être2.7
ou quelque chose de similaire.C'est une très bonne présentation sur le sujet. En gros, il explique les étapes pour écrire votre propre
virtualenv
avec les mêmes trucs Ian Bicking utilisé pour l'écrire.virtualenv myenv
. Cela crée un répertoire appelé myenv et copies le python système binaire à myenv/bin. Il ajoute également d'autres fichiers et répertoires nécessaires à myenv, y compris un script d'installation dans bin/activate et un lib sous-répertoire pour les modules et packages.. myenv/bin/activate
, qui définit le shellPATH
variable d'environnement afin de commencer avec myenv/bin.python
à partir de cette console, il va exécuter la copie de l'exécutable stocké dans myenv/bin. Même si le binaire est identique à celui dans /usr/bin/python, le standard de python binaire est destinée à la recherche pour les packages et modules dans des répertoires qui sont relatifs à l'binaire du chemin (cette fonctionnalité n'est pas liée à virtualenv). Il semble en ../lib/pythonX.Y où X et Y sont les majeures et mineures les numéros de version de python binaire. Alors maintenant, il est à la recherche de myenv/lib/pythonX.Y.pip
de sorte que lorsque l'utilisateur installe de nouveaux paquets à l'aide de pip dans le virtualenv, ils seront installés dans myenv/lib/pythonX.Y../lib/pythonX.Y
et même d'autres choses liées àsys.prefix
et etc?mkdir /tmp/bin; mkdir /tmp/lib; cp /usr/bin/python /tmp/bin; cp -r /usr/lib/pythonX.Y/ /tmp/lib/pythonX.Y; /tmp/bin/python
. Tapezimport sys; sys.prefix
. Cela permettra de montrer "/tmp". Si vous supprimez le /tmp/lib, il reviendra à "/usr".