virtualenv不会复制像shutil和urllib2这样的标准模块

Bar*_*emy 3 python virtualenv

当我创建一个新的virtualenv时,virtualenv .virtualenvs/my_env只有一小部分标准python模块被复制/链接到新的virtualenv.

例如,当我ls -l在.virtualenvs/my_env/lib/python2.6中进行时,我看到:

...
... os.py -> /usr/lib/python2.6/os.py
... os.pyc -> /usr/lib/python2.6/os.pyc
Run Code Online (Sandbox Code Playgroud)

但模块喜欢shutilurllib2不复制,即使它们在/usr/lib/python2.6/shutil.py.我正在使用Ubuntu 9.10.

这是预期的行为吗?如何在virtualenv中安装shutil等模块(我在pypi上找不到这些模块)?

Jef*_*ris 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'>
Run Code Online (Sandbox Code Playgroud)

我的os模块来自我的虚拟环境,但是shutil模块来自我的系统Python.

  • 知道为什么某些模块被复制/符号链接但其他模块没有? (3认同)