4

当我创建一个新的 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

但是模块喜欢shutil并且urllib2不会被复制,即使它们在/usr/lib/python2.6/shutil.py. 我正在使用 Ubuntu 9.10。

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

4

1 回答 1

7

virtualenvsys.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。

于 2010-03-29T14:59:48.953 回答