53 votes

Comment fonctionne virtualenv?

J'ai vérifié le script d' activation et il me semble qu'il ne fait que:

  • définir VIRTUAL_ENV env
  • ajouter $ VIRTUAL_ENV / bin devant PATH

Comment virtualenv fournit-il cet environnement virtuel magique par ceux-ci? Qu'est-ce que je manque

51voto

Max Points 822

Je vais décrire les processus de base, de qui j'ai appris à partir de la présentation qui 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. Ensuite, le python binaire (qui est juste une copie de votre python système binaire) sera en /home/blah/scratch/bin/python. Python recherche pour lib/pythonX.X/os.py en /home/blah/scratch/bin/, alors /home/blah/scratch/, et ça s'arrête là, car /home/blah/scratch/lib/pythonX.X/os.py existe. Si elle n'a pas, Python serait de les garder à la recherche pour /home/blah/lib/pythonX.X/os.py, etc. Il définit ensuite sys.prefix sur cette base. Il utilise un procédé similaire à définir sys.exec_prefix, puis sys.path est construit sur la base de ces.

24voto

jcollado Points 18325

Il s'agit d'une très bonne présentation sur le sujet. Fondamentalement, il explique les étapes pour écrire votre propre virtualenv avec les mêmes astuces utilisées par Ian Bicking pour l'écrire.

13voto

clark800 Points 561
  1. D'abord l'utilisateur crée un nouveau virtualenv avec la commande 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 une lib sous-répertoire pour les modules et packages.
  2. Ensuite, l'utilisateur des sources de l'activer script avec . myenv/bin/activate, ce qui définit la coque PATH variable d'environnement afin de commencer avec myenv/bin.
  3. Maintenant, lorsque l'utilisateur exécute python de cette enveloppe, 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 se regarde dans ../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.
  4. Le myenv/bin répertoire contient également un script nommé pip , de sorte que lorsque l'utilisateur installe de nouveaux packages à l'aide de pip dans le virtualenv, ils seront installés dans myenv/lib/pythonX.Y

0voto

mangobug Points 2016

Cet article traite de python et django avec linux. http://www.saltycrane.com/blog/2009/05/notes-using-pip-and-virtualenv-django/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X