2010-03-29 7 views
3

Lorsque je crée un nouveau virtualenv, virtualenv .virtualenvs/my_env, seul un sous-ensemble des modules python standard est copié/lié au nouveau virtualenv.virtualenv ne copie pas les modules standard comme shutil et urllib2

Par exemple, quand je fais ls -l dans .virtualenvs/my_env/lib/python2.6, je vois:

... 
... os.py -> /usr/lib/python2.6/os.py 
... os.pyc -> /usr/lib/python2.6/os.pyc 

mais comme modules shutil et urllib2 ne sont pas copiés même si elles sont en /usr/lib/python2.6/shutil.py. J'utilise Ubuntu 9.10.

Est-ce le comportement attendu? Comment puis-je installer des modules tels que shutil dans un virtualenv (je ne pouvais pas trouver ces modules sur pypi)?

Répondre

6

virtualenv munges sys.path pour insérer votre environnement virtuel devant des bibliothèques système, mais les bibliothèques du système sont encore sur le chemin, ils doivent toujours être accessibles.

Ainsi, par exemple, faire:

>>> import os 
>>> os 
<module 'posixpath' from '/environments/userpython/lib/python2.6/posixpath.pyc'> 
>>> import shutil 
>>> shutil 
<module 'shutil' from '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/shutil.pyc'> 

Mon module os est de mon environnement virtuel, mais le module shutil vient de mon système Python.

+0

Merci pour la clarification! Ceci explique le comportement que j'ai observé. Pour les utilisateurs de pydev, n'oubliez pas d'ajouter le chemin système python lors de l'ajout d'un interpréteur virtualenv. – Barthelemy

+2

Une idée de pourquoi certains modules sont copiés/symlinked mais d'autres pas? –