python - `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 的正确方法是什么?
解决方案
我不知道这是否是发生这种情况的唯一原因,但请注意“访问被拒绝”错误指向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/188和https://github.com/pypa/pip/issues/1299。
推荐阅读
- design-patterns - 不同格式的设计模式
- arrays - 具有匹配属性值的不同实体的项目组数组
- php - 调用 DOMDocument()->load 获取永恒时间加载页面
- sql - Oracle SQL 过程跟踪
- html - 图片超出页面限制
- seaborn - 使用 Seaborn 按列值更改对绘图点的颜色
- javascript - 无法在 Javascript 中使用索引访问数组元素
- r - 如何在igraph R中的图形组件之间添加边
- visual-studio-code - 我想摆脱 vs-code 中的行长指示符
- javascript - JavaScript 将代理 getter/setter 绑定到特定上下文