在Windows虚拟环境中使用`pip install --upgrade pip`命令升级pip失败,提示"Access denied"。

10
在Windows系统下,如果你试图在虚拟环境中使用pip升级它自身,可能会遇到一个神秘的“访问被拒绝”错误。例如:
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版本,而--user不会做到。 有什么问题,以及在Windows上升级虚拟环境中的pip的正确方法是什么?

你尝试过以管理员身份运行命令提示符吗? - EcSync
@EcSync 是的,无论命令提示符是否提升,都会发生完全相同的事情。 - zwol
可能是Windows 10和pip升级-访问被拒绝的重复问题。 - phd
https://stackoverflow.com/search?q=%5Bpip%5D+%5Bwindows%5D+upgrade+Access+denied - phd
1
@phd,那很好,但之前的问答完全没有在多次搜索中出现,并且还吸引了错误的答案(管理员权限绝对不会在我所说的情况下有帮助)。基本上,我写了这个来修复这个问题的谷歌排名。 - zwol
4个回答

28
我不确定这是唯一的原因,但请注意"拒绝访问"错误指向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 的情况。卸载成功,但安装不成功。 - Jari Turkia

1
您需要在Windows和虚拟环境中安装相同版本的pip。我认为这就是虚拟环境中出现访问被拒绝错误的原因。

在命令提示符中,

python -m pip install --upgrade pip

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


0

我也遇到了同样的错误,但是在我的系统pip和虚拟环境pip中都出现了。所以,当我尝试升级我的系统pip时,希望它没有被完全删除,我仍然可以使用“pip”命令。然而,我知道升级系统pip失败了。当我再次尝试该命令时,它说pip已经是最新版本。也许这只是一个小故障。我相信虚拟环境(virtualenv、venv)也是如此。当我升级系统pip时,我会收到以下错误:

ERROR: Could not install packages due to an OSError: [WinError 5] Access is denied: 'C:\\Users\\heewo\\AppData\\Local\\Temp\\pip-uninstall-8ob_krif\\pip.exe'
Consider using the `--user` option or check the permissions.

我知道这不是正常的。但与virtualenv不同,“pip”仍然安装着。我相信这仍然可以忽略,因为这只是一个已知问题,大多数人都知道这个话题。对于我来说,在这种情况下python -m pip install --upgrade pip没有起作用。
我尝试了这种方法,对我有效。

virtualenv --pip [VERSION]

并将VERSION替换为pip上可用的最新版本。当您遇到错误时,这将打印出您尝试升级到的版本。
然后就可以解决问题了。


0

我本来想把这个留言放在zwol的回答下面,但是我还没有足够的声望。

我只是想要补充一下,如果有其他人像我一样通过谷歌搜索到这个问题,python -m pip install --upgrade pip 可以解决这个问题。然而,在执行这个命令之前,如果你尝试过 pip install --upgrade pip,那么在出现访问被拒绝的错误之前,会发生某些事情导致pip出现问题。我个人在尝试升级普通方式后遇到了 ModuleNotFoundError: No module named 'pip' 的错误。

一旦我删除并重新启动了我的 virtualenv,并且第一个命令是 python -m pip install --upgrade pip,它就可以正常工作了。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接