为什么virtualenv不包括所有的系统路径?

时间:2010-11-04 22:18:36

标签: python path virtualenv

我创建了一个virtualenv,虽然它有许多系统路径,但它没有其他系统路径。具体来说,似乎没有包括pyshared和dist-packages。因此,我的系统范围MySQLdb和psycopg2不可用。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

我唯一可能知道的方法是,如果你用参数--no-site-packages创建了你的virtualenv:

来自Here

  

如果你使用virtualenv构建   --no-site-packages ENV它不会继承任何包   /usr/lib/python2.5/site-packages(或   无论你的全球网站包裹在哪里   目录是)。如果你这可以使用   无法控制站点包   并且不想依赖于   在那里打包,或者你只想要更多   与全球系统隔离。

所以这是一个了解更多的例子:

首先我会正常创建一个virtualenv(没有--no-site-package),你会看到它 我总是可以访问安装在我的系统站点包中的django(或 dist-packages ):

$ 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

现在你看到virtaulenv能够从我的机器中的系统 dist-packages ubuntu )访问django。

希望这会有所帮助:)