在Windows virtualenv中,“ pip install --upgrade pip”失败,显示“拒绝访问”

时间:2019-10-30 14:43:58

标签: python windows pip virtualenv

在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选项的建议无济于事,因为我们要在virtualenv 内升级pip 的版本,而--user则不会。

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

3 个答案:

答案 0 :(得分:2)

我不知道这是否是 only 的可能原因,但是请注意,“ {拒绝访问”错误点指向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

答案 1 :(得分:0)

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

在提示中,python -m pip install --upgrade pip

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

答案 2 :(得分: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,它工作得很好。

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