首页 > 解决方案 > `pip install --upgrade pip` 在 Windows 虚拟环境中失败,“访问被拒绝”

问题描述

在 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选项的建议没有帮助,因为我们想在 virtualenv中升级 pip 的版本,但这是--user行不通的。

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

标签: pythonwindowspipvirtualenv

解决方案


我不知道这是否是发生这种情况的唯一原因,但请注意“访问被拒绝”错误指向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


推荐阅读