You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows虚拟环境执行pip install --upgrade pip提示‘Access denied’失败问题

Windows虚拟环境升级pip遇Access Denied的坑?我来教你解决!

先说说你遇到的情况

简直和我之前碰到的一模一样:用python -m venv建好虚拟环境,激活后跑pip install --upgrade pip,结果不管有没有管理员权限,都弹出这个错误:

Could not install packages due to an EnvironmentError: [WinError 5] Access is denied: 'd:\scratch\my-venv\scripts\pip.exe'

而且官方提示的--user选项完全没用,毕竟我们要升级的是虚拟环境里的pip,不是用户全局的。

问题到底出在哪?

这真不是你权限不够,是Windows的文件锁定机制在搞事情!当你直接运行pip.exe的时候,这个进程正占用着自己的可执行文件,Windows有个硬规则:正在被进程使用的exe文件不能被修改或替换——哪怕你对这个文件有完全读写权限也不行。

靠谱的解决方法来了

按推荐程度给你列几个方案:

1. 用Python模块方式升级(最简单有效)

激活虚拟环境后,别直接敲pip,改成通过Python解释器调用pip模块:

python -m pip install --upgrade pip

这样跑的是Python进程,不是直接启动pip.exe,不会锁定那个要被替换的exe文件,升级过程就能顺利完成。

2. 用get-pip.py脚本重装pip

如果第一种方法还不行,试试官方的get-pip脚本:

  • 先拿到get-pip.py脚本(从pip官方发布的渠道获取就行)
  • 激活虚拟环境后执行:
python get-pip.py

这个脚本会直接下载并安装最新版的pip,彻底覆盖虚拟环境里的旧版本,完全绕开进程锁定的问题。

3. 手动删旧pip再重装(备用方案)

要是上面两种都没搞定,就手动操作一波:

  • 先退出虚拟环境(输入deactivate回车)
  • 找到虚拟环境的Scripts目录(比如d:\scratch\my-venv\scripts),删掉里面的pip.exepip3.exepip3.7.exe(对应你的Python版本号)
  • 重新激活虚拟环境,运行:
python -m ensurepip --upgrade

这个命令会自动给虚拟环境重新装上最新版的pip。

为啥--user选项没用?

官方提示的--user是把pip装到当前用户的全局Python目录,根本不是虚拟环境的目录,所以完全达不到升级虚拟环境内pip的目的,这个提示在这种场景下确实没帮助。

内容的提问来源于stack exchange,提问作者zwol

火山引擎 最新活动