uv的全局缓存目录由UV_CACHE_DIR环境变量决定,未设置时Windows默认为C:\Users\用户名\AppData\Local\uv\cache,Linux/macOS为~/.cache/uv;可用uv cache dir命令确认当前路径。

uv 的全局缓存目录在哪?
uv 默认把所有下载的 wheel、源码归档、解析元数据都存在一个统一位置,而不是每个项目或虚拟环境各存一份。这个位置由 UV_CACHE_DIR 环境变量决定;没设时,它会 fallback 到系统默认路径:
- Linux/macOS:
/home/用户名/.cache/uv或~/.cache/uv - Windows:
C:\Users\用户名\AppData\Local\uv\cache
你可以随时用 uv cache dir 命令确认当前生效的路径。注意:这个目录是用户级隔离的,不是系统级共享——除非你显式配置了全局可写路径并设置 UV_CACHE_DIR 指向它。
为什么同一包在不同项目里不会重复下载?
uv 缓存不是靠文件名或 URL 简单去重,而是基于「精确缓存键(Cache Key)」。比如:
- 对 PyPI 上的
requests==2.31.0,缓存键包含包名、版本、Python 版本、平台标签(如cp311-cp311-manylinux_2_17_x86_64)、wheel 的 SHA256 校验值 - 对 Git 依赖,键里是完整 commit hash,不是分支名
- 对本地路径依赖,键里是
pyproject.toml的修改时间(mtime)
只要这些维度完全一致,uv 就直接复用缓存;哪怕两个项目都声明了 numpy,只要 Python 版本和平台相同,就只下一次。
Python 编程规范与最佳实践。强制 PEP 8 代码风格、语法校验、单元测试执行,适用于代码编写、审查和重构。触发词:Python、代码规范、py_compile、单元测试。
立即学习“Python免费学习笔记(深入)”;
缓存会被自动清理或失效吗?
uv 不会定期自动删缓存,但会按需失效:
- 当
uv.lock中记录的 wheel 校验值与缓存中文件不一致时,跳过使用并重新下载 - 运行
uv cache clean会清空整个缓存;加--packages可只清特定包 - 执行
uv pip install --reinstall xxx会绕过缓存,强制重拉(但不删旧缓存) - 手动删掉缓存目录里的某个子目录(如
archive/下的 tar.gz)后,下次安装同版本仍会复用其他部分(如已解析的元数据),不一定全量重下
真正容易被忽略的是:缓存键里含 Python 版本和平台信息。你在 macOS 上缓存的 torch wheel,在 Linux 服务器上根本不会命中——离线部署前必须确保开发机和目标机的 python --version 和 python -c "import platform; print(platform.machine())" 输出一致。

















