views:

129

answers:

1

When I create a new virtualenv, virtualenv .virtualenvs/my_env, there is only a subset of the standard python modules copied/linked to the new virtualenv.

For example, when I do ls -l in .virtualenvs/my_env/lib/python2.6, I see:

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

but modules like shutil and urllib2 are not copied even if they are in /usr/lib/python2.6/shutil.py. I am using Ubuntu 9.10.

Is this the expected behavior? How can I install modules such as shutil in a virtualenv (I could not find these modules on pypi)?

+6  A: 

virtualenv munges sys.path to insert your virtual environment in front of the system libraries, but the system libraries are still on the path, so they should still be accessible.

So, for instance, do:

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

My os module is from my virtual environment, but the shutil module is coming from my system Python.

Jeffrey Harris
Thanks for the clarification! This explains the behavior I observed.For pydev users, don't forget to add the python system path when adding a virtualenv interpreter.
Barthelemy