【问题标题】:How to reset virtualenv and pip?如何重置 virtualenv 和 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 中未明确显示的内容,因此如果全局安装了一个包,您可以使用此命令禁用/启用它。

标签: python django virtualenv ubuntu-10.04 pip


【解决方案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。

    不过,我们可以做一些事情来解决这个问题。

    1. 退出所有 virtualenvs,并检查您的$PYTHONPATH。确保它是空的;否则运行unset PYTHONPATH
    2. 使用virtualenv --no-site-packages myenvmyenv 创建一个新的virtualenv。
    3. 激活myenv 并再次检查您的$PYTHONPATH。它应该只有myenv
    4. 使用绝对路径运行pip,例如myenv/bin/pip freeze
    5. 如果您的 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 以获得全新的虚拟环境。

      【讨论】:

        猜你喜欢
        • 2014-06-17
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 1970-01-01
        • 2017-09-20
        相关资源
        最近更新 更多