为什么virtualenv不包含所有系统路径?
我创建了一个虚拟环境,虽然里面有很多系统路径,但有些路径却没有。特别是,pyshared和dist-packages这两个路径似乎没有被包含进去。因此,我系统中安装的MySQLdb和psycopg2这两个库在虚拟环境里用不了。有人知道这是为什么吗?
2 个回答
1
我知道的唯一方法是,如果你在创建虚拟环境的时候使用了参数 --no-site-packages:
来自 这里:
如果你用命令 virtualenv --no-site-packages ENV 来创建虚拟环境,它就不会继承来自 /usr/lib/python2.5/site-packages(或者你全局的 site-packages 目录)的任何包。这种方法适合你无法控制 site-packages 的时候,或者你不想依赖那里的包,或者你只是想和全局系统有更多的隔离。
下面是一个例子,帮助你更好地理解:
首先,我会正常创建一个虚拟环境(不加 --no-site-package),你会看到我可以随时访问安装在系统 site-packages(或者 dist-packages)里的 Django:
$ virtualenv A
New python executable in A/bin/python
Installing setuptools............done
$ source A/bin/activate
(A)$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.__file__
'/usr/local/lib/python2.6/dist-packages/django/__init__.pyc'
但是现在我会使用 --no-site-package 来创建虚拟环境:
$ virtualenv B --no-site-package
New python executable in B/bin/python
Installing setuptools............done.
$ source B/bin/activate
(B)$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named django
现在你会看到虚拟环境无法访问我机器上系统的 dist-packages(ubuntu)里的 Django。
希望这能帮到你 :)