4

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

我想知道当我什至没有在虚拟环境中明确安装任何东西时,安装了多少库。

更新 1:当一些答案建议时,我virtualenv --no-site-packages也在步骤 1 中使用,创建一个新的 venv,同样的问题仍然存在。好像使用参数根本没有效果。

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

4

4 回答 4

4

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

最佳实践是在创建 virtualenv 时使用该--no-site-packages选项,以避免这个确切的问题。

于 2014-11-24T09:50:55.477 回答
1

我能够解决这个问题。在我的 ~/.bash_profile 文件中;我有以下造成问题的行:

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

正如 Martin Lewis 在对这个相关问题的回答中指出的那样,将从--no-site-packagessys.path 中删除标准站点包目录。但是任何其他存在于标准 Python 路径中的东西仍然会保留。

PS:我仍然不确定为什么 virtualenv 会这样工作。为什么要包含 PYTHONPATH 上的软件包。但至少知道这一点可以解决我的问题。

于 2014-11-24T10:28:31.560 回答
0

请参阅文档 - --system-site-packages 选项

如果您使用 构建virtualenv --system-site-packages ENV,您的虚拟环境将从 /usr/lib/python2.7/site-packages(或您的全局站点包目录所在的任何位置)继承包。

如果您可以控制全局站点包目录,并且您希望依赖那里的包,则可以使用此选项。如果您想与全局系统隔离,请不要使用此标志。

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

于 2014-11-24T09:53:23.320 回答
0

一个“hackish”的解决方案是激活虚拟环境并运行

pip freeze | xargs pip uninstall -y

这将卸载所有不需要的软件包。

于 2020-11-24T05:42:10.610 回答