如何重置virtualenv和pip?

18 投票
3 回答
53506 浏览
提问于 2025-04-16 11:20

我在我的Ubuntu 10.04服务器上安装了virtualenv。

现在当我运行“pip freeze”时,它给我显示了以下这些包:

Django==1.2.4
distribute==0.6.10
python-apt==0.7.94.2ubuntu6.2
virtualenv==1.5.1
wsgiref==0.1.2

当我执行“pip uninstall Django”时,它显示:

pip uninstall Django
Uninstalling Django:
Proceed (y/n)? y
Successfully uninstalled Django

理论上,这个命令应该能卸载Django,但实际上并没有。我在运行“pip freeze”时仍然能看到相同的包。

接下来,有件奇怪的事是,当我创建一个virtualenv并在里面运行“pip freeze”时,我只看到一个包,那就是“wsgiref”,这很奇怪,因为它应该是空的。

而且,尽管我用“--no-site-packages”创建了这个virtualenv,我仍然可以用“django-admin.py startproject”创建一个新的django项目。

当我在这个virtualenv里启动Python解释器并运行“import django”时,它给我报错“没有名为django的模块”。

还有,当我尝试在这个virtualenv里安装“pip install Django”时,它却要求我输入sudo权限,这本来是不应该发生的。

我该如何解决这个问题?有没有办法重置所有的pep和virtualenv?

3 个回答

2

你只需要删除你的 .venv 文件,这样就能清除所有的依赖项。然后再运行 python3 -m venv .venv,就可以创建一个全新的虚拟环境了。

3

这个问题虽然有点老,但最近又被顶到了首页,所以很难看出你在用哪个版本的pip和virtualenv。

不过,我们可以做几件事情来理清楚这个问题。

  1. 先退出所有的虚拟环境,然后检查一下你的 $PYTHONPATH。确保它是空的;如果不是,就运行 unset PYTHONPATH 来清空它。
  2. 使用 virtualenv --no-site-packages myenv 创建一个新的虚拟环境,命名为 myenv
  3. 激活 myenv,然后再检查一下你的 $PYTHONPATH。它应该只包含 myenv
  4. 用绝对路径运行 pip,像这样 myenv/bin/pip freeze
  5. 如果在你的虚拟环境里找不到 pip,你可能需要手动安装它。

相关链接: virtualenv --no-site-packages 和 pip 仍然找到全局包?

最后,使用 myenv/bin/python 启动一个python命令行,然后运行:

>>> import sys
>>> sys.path

如果 pip 能找到 wsgiref,那么 wsgiref 一定在 sys.path 的某个路径里。好好利用这个线索!

8

根据我的理解,虚拟环境(venv)唯一的作用就是管理依赖关系。

你可以放心地先用 deactivate 命令退出虚拟环境,然后删除它,再用 virtualenv venv; source venv/bin/activate 创建一个新的虚拟环境。

这样你就可以重新开始了。

撰写回答