【问题标题】:Python - Virtual Environment uses System DirectoriesPython - 虚拟环境使用系统目录
【发布时间】:2017-06-05 10:07:48
【问题描述】:

我创建了一个 Python 虚拟环境,并通过以下方式激活它:

joe@joe-mint $ source ./venvs/deep-learning/bin/activate

这会将提示变成:

(deep-learning) joe@joe-mint $

现在,每当我运行 python 包或尝试安装一个包时,系统似乎忽略了它在虚拟环境中并在系统范围内执行操作的事实:

(deep-learning) joe@joe-mint $ which pip
/usr/local/bin/pip

当我尝试安装不在我的系统上的新软件包时,也会发生同样的情况;它将它们安装到系统文件(即 /usr/bin)而不是虚拟环境中。

我的虚拟环境出了什么问题?如何让它忽略系统文件并在环境中执行所有操作?


我查看了this 问题,它说在创建虚拟环境时使用显式标志以使其使用本地环境包,但我使用python-3.5 -m venv 创建虚拟环境,并删除了这个标志在此版本中,因为它现在是默认选项。

我还查看了this 问题,可以确认VIRTUAL_ENV 变量在虚拟环境的activate 文件中设置正确。

【问题讨论】:

  • echo $PATH 的结果是什么? activate 应该将 venv 的二进制文件放在 PATH 的前面
  • @jonatan - 结果是因为我安装了没有 pip 的 venv,pip 命令正在使用系统的命令。显然,尽管处于虚拟环境中,但这会导致它将软件包安装到系统中。我不太明白,但我设法在我的回答中解决了它。
  • @holdenweb - 我故意安装了没有 pip 的 venv,因为a bug 阻止了我做其他事情。
  • 这就是你的虚拟环境的问题

标签: python virtualenv


【解决方案1】:

这就是问题所在:

似乎如果你在没有本地安装pip的venv上运行pip,那么它将默认为venv之外的系统pip。即使您已经激活了虚拟环境,这似乎也想在系统上而不是在 venv 中安装包。

解决方案如下:

  • 首先,由于a bug that has long remained unresolved,我不得不安装没有pip的虚拟环境。

  • 其次,我按照here的指令在虚拟环境中安装了pip。但是,这样做需要使用一些临时文件夹,由于某种原因我的用户无权访问。所以这失败了,我让它工作的唯一方法就是成为 root。

    1. sudo su
    2. activate ..../venvs/deep-learning/bin/activate 激活虚拟环境。
    3. curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | python 根据上面链接的答案。

    虽然which pip 现在表明正在使用正确的pip(在venv 内),但运行pip 将使用系统一!停用 (deactivate) 并重新激活 venv 解决了这个问题。

    现在我花了一段时间才意识到,当我尝试在虚拟环境中使用 pip 安装更多软件包时,以 root 身份安装它会导致权限错误。

  • chown <user>:<group> -R ..../venvs/deep-learning/*

就是这样。完成这些步骤后,我可以激活 venv 并正确运行pip。它将在 venv 中使用 pip,并在 venv 中安装软件包。

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 2021-10-03
    • 2017-02-25
    • 2018-12-19
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多