根本原因是pip默认缓存目录被系统或杀毒软件锁死,或路径落在受保护区域;解决优先级为:查pip cache dir并赋予权限、加--no-cache-dir参数、重定向缓存至项目内或虚拟环境目录。

VSCode 终端 pip install 报错 “PermissionError: [Errno 13] Permission denied”
根本原因不是你没用管理员权限,而是 pip 默认缓存目录(pip cache dir)被系统或杀毒软件锁死,或者路径落在受保护区域(如 C:\Program Files 或用户配置文件夹的深层子目录),导致虚拟环境内的 pip 无法写入缓存。
常见现象包括:
- 在 VSCode 集成终端中执行
pip install requests突然卡住或报PermissionError: [Errno 13] - 同一命令在 CMD/PowerShell 外部终端能成功,但在 VSCode 里失败
-
pip cache info显示路径存在,但pip cache dir返回的目录实际不可写(比如权限为只读、被 OneDrive 同步锁定、被 McAfee 实时扫描拦截)
解决方法优先级如下:
- 运行
pip cache dir查出当前缓存路径,手动进入该目录,右键 → 属性 → 安全 → 编辑 → 添加当前用户并勾选“完全控制” - 临时绕过缓存:加
--no-cache-dir参数,例如pip install --no-cache-dir numpy(适合调试,不推荐长期使用) - 重定向缓存位置:在项目根目录下新建
pip.conf(Windows 是pip.ini),写入:[global]<br>cache-dir = ./pip_cache
,这样缓存就落在项目内,完全可控
Python 扩展自动激活虚拟环境后,pip 仍走全局缓存
VSCode 的 python.terminal.activateEnvironment 设置只负责把 PATH 指向虚拟环境的 Scripts 目录,但 pip 的缓存行为由 pip 自身配置决定,和解释器无关。也就是说,即使你看到终端提示符变成 (.venv),pip cache dir 返回的仍是全局路径。
这会导致两个问题:
- 不同虚拟环境共享同一份缓存,可能引发哈希校验冲突(尤其在 CI 或多项目切换时)
- 某项目缓存损坏后,所有项目 pip install 都受影响
建议做法:
- 不要依赖默认缓存;每个虚拟环境应有独立缓存空间
- 在激活虚拟环境后,立即运行
pip config set global.cache-dir ".venv/pip_cache"(Linux/macOS)或pip config set global.cache-dir ".venv\pip_cache"(Windows) - 验证是否生效:执行
pip cache info,确认Cache directory已指向.venv/...路径下
Conda 环境 + VSCode 时 pip 缓存权限更隐蔽
Conda 创建的环境本身不接管 pip 缓存逻辑,但 conda 的包管理器(conda install)和 pip 混用时,容易因缓存目录归属混乱引发权限拒绝。典型表现是:conda activate myenv 后再 pip install,报错提示路径在 C:\Users\XXX\AppData\Local\pip\Cache —— 这个路径常被 Windows Defender Application Control 或企业组策略限制写入。
此时不能简单改权限,因为该路径属于系统用户配置范围,修改风险高。更稳妥的方式是:
- 在 conda 环境中优先用
conda install,避免 pip - 必须用 pip 时,强制指定缓存位置:
pip install --cache-dir "%CD%\pip_cache" flask - 或在 conda 环境激活后,运行
pip config --site set global.cache-dir "%CONDA_PREFIX%\pip_cache",让缓存绑定到当前 conda 环境目录内
requirements.txt 安装失败,根源在缓存目录跨用户或网络驱动器
当项目放在 OneDrive、Google Drive 同步文件夹,或通过映射网络盘(如 Z:\project)打开时,pip install -r requirements.txt 极易因缓存目录位于同步区而触发文件锁或权限拦截。错误信息常含 Access is denied 或 FileLock 关键词。
这不是 VSCode 的 bug,而是 pip 在同步目录中尝试原子写入缓存时被云服务阻断。解决思路很直接:
- 把项目移到本地非同步路径(如
D:\dev\myproject) - 若必须放同步盘,禁用该子目录的同步(OneDrive 右键 → “始终在此设备上保留”)
- 在
requirements.txt前加--no-cache-dir:执行pip install --no-cache-dir -r requirements.txt
真正麻烦的不是找不到权限开关,而是 pip 缓存路径会随 Python 解释器来源(系统 Python / pyenv / conda / venv)、操作系统、甚至 VSCode 启动方式(桌面快捷方式 vs 命令行启动)悄悄变化,不查 pip cache dir 就动手改权限,大概率改错地方。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











