【问题标题】:`pip install --upgrade pip` fails inside a Windows virtualenv with "Access denied"`pip install --upgrade pip` 在 Windows 虚拟环境中失败,“访问被拒绝”
【发布时间】:2020-02-25 21:40:10
【问题描述】:

在 Windows 上,如果您尝试使用 pip 升级自身,在 virtualenv 中,您可能会收到一个神秘的“访问被拒绝”错误。例如:

D:\scratch\> C:\Program Files\Python\3.7.4\x64\python.exe -m venv D:\scratch\my-venv
D:\scratch\> D:\scratch\my-venv\Scripts\activate
(my-venv) D:\scratch\> pip install --upgrade pip

Collecting pip
  Downloading pip-19.3.1-py2.py3-none-any.whl (1.4MB)
Installing collected packages: pip
  Found existing installation: pip 19.0.3
    Uninstalling pip-19.0.3:
Could not install packages due to an EnvironmentError: 
  [WinError 5] Access is denied: 'd:\\scratch\\my-venv\\scripts\\pip.exe'
Consider using the `--user` option or check the permissions.

无论命令提示符是否具有管理权限,都会发生这种情况。 我们知道我们对d:\scratch\my-venv 中的所有内容都有写访问权限,因为我们只是使用初始python -m venv 命令创建了它。使用--user 选项的建议没有帮助,因为我们想升级 pip 的版本在 virtualenv 中,而--user 不会这样做。

可能出了什么问题,在 Windows 上的 virtualenv 中升级 pip 的正确方法是什么?

【问题讨论】:

  • 你试过运行管理员命令提示符吗?
  • @EcSync 是的,无论命令提示符是否提升,都会发生完全相同的事情。
  • @phd 很好,但早期的问答在多次搜索中完全失败,而且它还吸引了错误的答案(在我正在谈论的场景中,管理权限绝对没有帮助) .我写这个是为了解决这个问题的谷歌果汁,基本上。

标签: python windows pip virtualenv


【解决方案1】:

我不知道这是否是发生这种情况的唯一原因,但请注意d:\scratch\my-venv\scripts\pip.exe 处的“访问被拒绝”错误点。 pip 正在尝试替换 自身,而 Windows 不允许您以任何方式修改正在运行的 EXE 文件。

解决此特定问题的方法是改用python -m pip install --upgrade pip。这样,pip.exe 没有运行,因此 Windows 将允许替换它。此操作不会尝试覆盖d:\scratch\my-venv\scripts\python.exe,Windows 也不关心 pip 对属于 pip 包的所有其他文件做了什么。

有关详细信息,请参阅 https://github.com/pypa/pip/issues/188https://github.com/pypa/pip/issues/1299

【讨论】:

  • 谢谢。正如建议的那样,运行python -m pip install --upgrade pip 确实有效。有人添加支票将是一个非常好的主意。让 venv 根本没有 pip 是很容易的。卸载成功,安装失败。
【解决方案2】:

您必须在 Windows 中安装与虚拟环境中相同版本的 pip。我认为这就是虚拟环境中出现错误Access Denied 的原因。

在提示中,

python -m pip install --upgrade pip

位于虚拟环境的Scripts文件夹中,执行更新命令upgrade pip in venv

【讨论】:

    【解决方案3】:

    我会将此放在对 zwol 答案的评论中,但我还没有足够的声誉。

    我只是想像我一样添加到任何其他可能从谷歌遇到这个问题的人,python -m pip install --upgrade pip 确实为我解决了这个问题。但是,如果您在此之前尝试pip install --upgrade pip,那么在您遇到导致 pip 混乱的访问被拒绝错误之前的过程中会发生一些事情。在尝试正常升级后,我个人得到了ModuleNotFoundError: No module named 'pip'

    一旦我删除并重新启动我的virtualenv 并让第一个命令为python -m pip install --upgrade pip 它工作得很好。

    我希望这可以帮助其他像我一样苦苦挣扎的新手! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2022-01-11
      • 1970-01-01
      • 2021-11-15
      • 2015-09-19
      • 1970-01-01
      相关资源
      最近更新 更多