如何重置 virtualenv 和 pip?
Posted
技术标签:
【中文标题】如何重置 virtualenv 和 pip?【英文标题】:How to reset virtualenv and pip? 【发布时间】:2011-06-22 06:19:29 【问题描述】:我在我的 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 吗?
【问题讨论】:
你可能用 apt 安装了 django? (如果是这样,它应该在 dist-packages 中)您可以运行 django-admin.py,因为它在 PATH 中。 不,不是。当我执行“dpkg -l”时,我在任何地方都看不到 django。此外,当我尝试“sudo apt-get remove django”时,它说“找不到包 django。python-django 也是如此。 @Sushi 从 virtualenv 外部启动的解释器在尝试import django
时是否仍然报错?
@Sushi 如果import django
在virtualenv 之外工作,请执行import django;django.__path__
。这将显示仍然安装 django 的路径。
未来,toggle-site-packages
将关闭您的 virtualenv 中未明确显示的内容,因此如果全局安装了一个包,您可以使用此命令禁用/启用它。
【参考方案1】:
据我所知,venv 的唯一目的是管理依赖关系。
您应该安全地只使用deactivate
venv,将其删除,然后使用virtualenv venv; source venv/bin/activate
创建一个新的。
这会给你一个新的开始。
【讨论】:
【参考方案2】:重置虚拟环境的最佳方式
Windows 环境使用以下命令:
pip freeze > unins && pip uninstall -y -r unins && del unins
Linux 环境使用以下命令:
pip freeze > unins && pip uninstall -y -r unins && rm unins
【讨论】:
Linux 的小快捷方式:pip uninstall -y -r <(pip freeze)
【参考方案3】:
这个问题很老了,但它被撞到了首页,所以很难辨别你使用的是哪个版本的 pip 和 virtualenv。
不过,我们可以做一些事情来解决这个问题。
-
退出所有 virtualenvs,并检查您的
$PYTHONPATH
。确保它是空的;否则运行unset PYTHONPATH
。
使用virtualenv --no-site-packages myenv
在myenv
创建一个新的virtualenv。
激活myenv
并再次检查您的$PYTHONPATH
。它应该只有myenv
。
使用绝对路径运行pip
,例如myenv/bin/pip freeze
。
如果您的 virtualenv 中没有 pip
,您可能需要手动安装它。
相关:virtualenv --no-site-packages and pip still finding global packages?
最后,使用myenv/bin/python
启动一个python shell,然后运行:
>>> import sys
>>> sys.path
如果pip
可以找到wsgiref
,则wsgiref
必须在sys.path
中的路径之一中。使用那个线索!
【讨论】:
【参考方案4】:您只需删除 .venv 文件即可删除所有依赖项,然后运行 python3 -m venv .venv
以获得全新的虚拟环境。
【讨论】:
以上是关于如何重置 virtualenv 和 pip?的主要内容,如果未能解决你的问题,请参考以下文章