如何重置virtualenv和pip?
我在我的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 个回答
你只需要删除你的 .venv 文件,这样就能清除所有的依赖项。然后再运行 python3 -m venv .venv
,就可以创建一个全新的虚拟环境了。
这个问题虽然有点老,但最近又被顶到了首页,所以很难看出你在用哪个版本的pip和virtualenv。
不过,我们可以做几件事情来理清楚这个问题。
- 先退出所有的虚拟环境,然后检查一下你的
$PYTHONPATH
。确保它是空的;如果不是,就运行unset PYTHONPATH
来清空它。 - 使用
virtualenv --no-site-packages myenv
创建一个新的虚拟环境,命名为myenv
。 - 激活
myenv
,然后再检查一下你的$PYTHONPATH
。它应该只包含myenv
。 - 用绝对路径运行
pip
,像这样myenv/bin/pip freeze
。 - 如果在你的虚拟环境里找不到
pip
,你可能需要手动安装它。
相关链接: virtualenv --no-site-packages 和 pip 仍然找到全局包?
最后,使用 myenv/bin/python
启动一个python命令行,然后运行:
>>> import sys
>>> sys.path
如果 pip
能找到 wsgiref
,那么 wsgiref
一定在 sys.path
的某个路径里。好好利用这个线索!
根据我的理解,虚拟环境(venv)唯一的作用就是管理依赖关系。
你可以放心地先用 deactivate
命令退出虚拟环境,然后删除它,再用 virtualenv venv; source venv/bin/activate
创建一个新的虚拟环境。
这样你就可以重新开始了。