【问题标题】:Why does pip freeze report some packages in a fresh virtualenv created with --no-site-packages?为什么 pip freeze 会报告使用 --no-site-packages 创建的新 virtualenv 中的一些包?
【发布时间】:2011-10-01 09:44:46
【问题描述】:

当我创建一个新的 virtualenv 时,pip freeze 显示我安装了几个包,即使我没有在环境中安装任何东西。我期待pip freeze 在我第一个pip install 进入环境之前返回空输出。 wsgiref is part of the standard library 不是,那它为什么会出现呢?

day@garage:~$ mkdir testing day@garage:~$ cd testing day@garage:~/testing$ virtualenv --no-site-packages 。 ./bin/python 中的新 python 可执行文件 安装分发.................................................................. ………… ..................................................... ..................................... .........................................完毕。 day@garage:~/testing$ 。垃圾箱/激活 (测试)day@garage:~/testing$ pip freeze 分发==0.6.10 wsgiref==0.1.2

一些额外的信息:

(测试)day@garage:~/testing$ pip --version 来自 /home/day/testing/lib/python2.7/site-packages/pip-0.7.2-py2.7.eg 的 pip 0.7.2 g (python 2.7) (测试)day@garage:~/testing$ 停用 day@garage:~/testing$ virtualenv --version 1.4.9 day@garage:~/testing$ which virtualenv /usr/bin/virtualenv day@garage:~/testing$ dpkg -S /usr/bin/virtualenv python-virtualenv: /usr/bin/virtualenv day@garage:~/testing$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=11.04 DISTRIB_CODENAME=natty DISTRIB_DESCRIPTION="Ubuntu 11.04"

【问题讨论】:

  • distribute 是提供 pip 本身的东西,所以如果你想能够使用 pip 在你的 virtualenv 中安装东西,你需要从 pip 开始。 pip 依赖于 wsgiref。
  • pip 不依赖于 wsgiref

标签: python ubuntu virtualenv pip


【解决方案1】:

每次您使用 --no-site-packages 创建 virtualenv 时,它都会安装 setuptoolsdistribute。而出现wsgiref 的原因是因为python 2.5+ 标准库向wsgiref lib 提供了egg 信息(而pip 不知道它是stdlib 还是第3 方包)。

似乎在Python3.3+上解决了:http://bugs.python.org/issue12218

【讨论】:

  • 那么删除 wsgiref 是否安全?感谢您的信息!
  • 不,删除它是不安全的,因为wsgiref 是python 标准库的一部分:docs.python.org/library/wsgiref.html
  • 是的,您不应该删除 wsgiref 本身。但是,如果您从pip freeze 的输出中生成了wsgiref 行,那么从requirements.txt 中删除该行是安全的。
  • 这真的很奇怪。我创建了一个新的 virtualenv 并安装了一些软件包。当我执行pip freeze 时,只显示已安装的软件包。两天后,我又安装了一些软件包,突然pip freeze 显示distributewsgiref。为什么一开始就干净?!?
【解决方案2】:

要回答一个稍微不同的问题:您可以通过使用pip freeze -l 而不是pip freeze 来排除wsgiref(以及任何其他类似问题的.egg 文件,如果您因为某种原因不幸拥有任何文件)。

pip help freeze 描述了这个选项:

-l, --local 如果在 virtualenv 中,不报告全局安装的包

【讨论】:

  • 我花了太长时间才找到这个答案。我需要-l
猜你喜欢
  • 2016-02-17
  • 2011-02-15
  • 1970-01-01
  • 2010-11-25
  • 2012-02-11
  • 2011-03-23
  • 2012-09-17
  • 1970-01-01
  • 2020-07-02
相关资源
最近更新 更多