如何重置 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 myenvmyenv 创建一个新的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?的主要内容,如果未能解决你的问题,请参考以下文章

如何将Python virtualenv移至其他系统(计算机)并使用站点软件包中的软件包

mac下Python关于venv 的使用

Python中Virtualenv和pip如何使用?

如何从virtualenv导入使用pip安装的模块

在 virtualenv 中控制 pip 版本

apt-get virtualenv 和 pip virtualenv 有啥区别?