uv是Astral公司用Rust编写的Python包与环境管理工具,一站式替代pip、venv、pyenv等,支持Python版本管理、虚拟环境创建、依赖安装与锁定,通过uv.lock确保可重现性,速度较传统工具快10–100倍。

uv 不是“另一个 pip 替代品”,它是把 Python 版本管理、虚拟环境、依赖安装、工具分发全塞进一个二进制里的实际生产力工具。你不需要先装 pyenv 再配 conda,也不用在 requirements.txt 和 pyproject.toml 之间反复同步——uv 一条命令就能从空目录跑起一个可复现、可提交、可 CI 的项目。
怎么快速装好 Python 3.11 和 3.12 并随时切换
传统方式要手动下载 MSI、改 PATH、防冲突;uv 直接托管二进制,不碰系统 Python。
-
uv python install 3.11 3.12:自动下载并安装两个版本,路径统一收口在~/.uv/python(Linux/macOS)或%LOCALAPPDATA%\uv\python(Windows) -
uv python list --only-installed:只列出已装好的版本,避免python3.11 -V一个个试 -
uv python pin 3.12:当前目录生成.python-version,后续所有uv命令自动用该版本,包括uv venv、uv run - 误删了某个版本?下次
uv venv --python 3.11会自动补装,不用你手动干预
注意:uv python install pypy 或 uv python install '>=3.8, 同样有效,支持实现名和区间语法。
创建虚拟环境时为什么推荐用 uv venv 而不是 python -m venv
uv venv 不只是建个 .venv 文件夹,它会主动校验解释器可用性、自动注入 uv.lock 兼容逻辑、默认启用哈希验证,并且能复用全局缓存。
立即学习“Python免费学习笔记(深入)”;
- 显式指定版本:
uv venv --python 3.11.6,如果本地没装 3.11.6,它会先下载再建环境 - 静默复用系统解释器:
uv venv默认优先找 PATH 中的python3.11,不重复下载已有版本 - 不激活也能运行:
uv run python -c "print('hello')"自动绑定当前项目的.venv,比手动source .venv/bin/activate更轻量 - Windows 用户注意:
uv venv在 PowerShell 下生成的是.venv\Scripts\Activate.ps1,需先执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser才能激活
uv add 和 uv install 的关键区别在哪
uv add 修改的是 pyproject.toml 的 [project.dependencies],属于“声明”;uv install 是“落实”,它读取 pyproject.toml + uv.lock,真正把包装进 .venv。
-
uv add fastapi pytest:写入pyproject.toml,同时自动生成/更新uv.lock -
uv install --dev:装[project.optional-dependencies.dev]里的包,不装进生产环境 -
uv install --locked:严格按uv.lock安装,CI 场景必须加这个参数,否则可能因网络波动或索引变更导致依赖漂移 - 没生成
uv.lock就直接uv install?它会先解析再锁再装,但首次生成的锁文件平台标记(如manylinux_2_17_x86_64)可能和 CI 机器不一致
想临时跑个工具(比如 ruff)但不想污染项目环境
别用 pipx,也别往 dev-dependencies 里硬塞——uvx 和 uv tool install 是专为这设计的。
-
uvx ruff check main.py:每次执行都新建隔离环境,装完即删,不写任何文件到项目目录 -
uv tool install ruff@0.5.2:装成系统级命令,ruff直接进 PATH,且自带独立虚拟环境,和你的项目.venv完全无关 -
uvx --from "httpx>=0.27" httpx https://httpbin.org/get:指定依赖范围,避免工具版本和项目冲突 - 第一次
uvx某个包后,后续uv tool install几乎秒装,因为共用~/.cache/uv
真正容易被忽略的是:当你在项目里执行 uv run ruff check,它走的是项目环境里的 ruff;而直接敲 ruff check,走的是 uv tool install 装的版本——两者可能完全不同,调试时务必确认命令来源。


















