当我创建一个新的virtualenv virtualenv .virtualenvs/my_env
时,只有一小部分标准python模块被复制/链接到新的virtualenv。
例如,当我在.virtualenvs / my_env / lib / python2.6中ls -l
时,我看到:
...
... os.py -> /usr/lib/python2.6/os.py
... os.pyc -> /usr/lib/python2.6/os.pyc
但shutil
和urllib2
等模块即使在/usr/lib/python2.6/shutil.py
中也不会被复制。我正在使用Ubuntu 9.10。
这是预期的行为吗?如何在virtualenv中安装shutil等模块(我在pypi上找不到这些模块)?
答案 0 :(得分:6)
virtualenv munges sys.path
将您的虚拟环境插入系统库的前面,但系统库仍在路径上,因此它们仍然可以访问。
所以,例如,做:
>>> 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'>
我的os模块来自我的虚拟环境,但是shutil模块来自我的系统Python。