2014-11-24 64 views
1

我使用python virtualenv工具创建了一个新的虚拟环境。新创建的Python虚拟环境中的默认库

virtualenv venv 

我然后激活虚拟环境

source venv/bin/activate 

然后我做了一个pip freeze这是我得到了什么:

(venv)$ pip freeze 
Flask==0.10.1 
Werkzeug==0.9.6 
itsdangerous==0.24 
lxml==3.4.0 
numpy==1.9.1 
pdir==0.2.2 
virtualenv==1.11.6 
wsgiref==0.1.2 

我想知道,许多图书馆是怎么所以安装时我甚至没有明确地在虚拟环境中安装任何东西。

UPDATE 1:当一些答案建议时,我在步骤1中也使用了virtualenv --no-site-packages以创建一个新的venv并且同样的问题持续存在。仿佛使用论点根本没有任何效果。

UPDATE 2:我能够解决这个问题,并在下面发布了我的经验。正如评论中指出的那样;这是一个相关的问题; link,这帮助我解决了这个问题。

+0

我在Mac OS X 10.10上使用自制软件编写的python。早些时候,我在Ubuntu上使用Python并从未遇到过这个问题。 – 2014-11-24 09:44:16

+1

http:// stackoverflow。com/questions/1382925/virtualenv-no-site-packages-and -pip-still-finding-global-packages – 2014-11-24 10:01:19

+1

^谢谢。这很有用。 – 2014-11-24 10:33:29

回答

2

这些是已在系统上全局安装的库。

最佳做法是在创建virtualenv时使用--no-site-packages选项以避免此确切问题。

+0

出于某种原因,我认为--no-site-packages已经成为virtualenv – pad 2014-11-24 09:55:47

+0

中的默认设置,即使在使用--no-site-packages之后,我仍然面临着这个问题。我之前在ubuntu上使用过python,从来没有遇到过这个问题。即使没有使用--no-site-packages,新鲜venv也不包含系统库。这是我想的默认值。现在,即使我使用--no-site-packages,也没有任何反应。 (在OS X 10.10上使用python) – 2014-11-24 09:58:40

0

documentation - The --system-site-packages Option

如果建立与virtualenv --system-site-packages ENV,虚拟 环境将继承包从 /usr/lib/python2.7/site-packages(或其它地方全局 网站-packages目录是)。

如果您拥有对全球站点包 目录的控制权,并且您希望依赖其中的软件包,则可以使用此功能。如果您想从全局系统中分离出 ,请不要使用此标志。

这些库已经安装在您的系统中。除非你指定--no-site-packages,否则它们将被继承。

0

我能解决问题。在我的〜/ .bash_profile文件中;我有以下行这是创造了一个问题:

export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH 

正如马丁·刘易斯,在回答中指出,这个related question--no-site-packages将从sys.path中删除标准site-packages目录。但是标准Python路径中的任何其他东西仍然会保留。

P.S:我还不确定为什么virtualenv以这种方式工作。为什么要包含PYTHONPATH中的软件包。但至少知道这解决了我的问题。