本文与《Python-环境管理-包管理器-uv》同系列:上一篇偏背景与选型,本篇偏怎么在脑子里摆放 uv 的各个概念,以及日常命令与示例。具体行为以官方文档为准:https://docs.astral.sh/uv/。
段末注释:CLI(命令行界面,Command Line Interface)指终端里使用的
uv命令;PEP(Python Enhancement Proposal)为 Python 改进提案编号。
1. uv 的心智模型:把五件事摆到一张桌上
可以先把 uv 想成围绕 「一个项目目录」 工作的 单入口 CLI:它把过去分散在 pip、venv、pyenv(或系统 Python)里的动作,收成几条稳定的主路径。下面五块拼图一起记,就不容易迷路。
1.1 项目是真源(pyproject.toml)
- 依赖声明(依赖谁、版本约束)写在
pyproject.toml里,符合 PEP 621 等社区惯例。 - 你心里默认:改依赖 = 先改声明,再同步到环境,而不是「先 pip 装一堆,最后才想起来导出」。
1.2 锁文件是可复现快照(uv.lock)
uv.lock(若使用锁定工作流)记录解析结果的精确版本,用于团队与 CI 对齐「装出来一样」。- 心智上把它当作 「依赖解析的 git 快照」:提交到仓库,和 Cargo 的 Cargo.lock 类比最顺。
段末注释:CI(持续集成,Continuous Integration)指自动构建与测试流水线。
1.3 虚拟环境是项目本地的「安装目录」
- 默认会在项目下使用
.venv(名称与路径可按约定调整),里面是可执行的python与已装包。 - 不要和「全局系统 Python」混成同一套心智:日常开发以 项目
.venv为准。
1.4 全局缓存加速重复安装
- uv 在机器上维护包缓存(概念上接近 pnpm 的 store):不同项目共享下载与构建产物,重复安装更快。
- 你通常不需要手动管理缓存,知道「为什么第二次特别快」即可。
1.5 三条高频主路径
| 你想做什么 | 典型心智 | 常见入口 |
|---|---|---|
把声明和锁文件落实到 .venv |
「同步环境」 | uv sync |
| 不手动激活 venv 就跑命令 | 「项目上下文运行」 | uv run ... |
| 临时跑一个 PyPI 上的 CLI 工具 | 「一次性工具」 | uvx 某工具 |
1.6 原理与架构:数据流与执行分层(示意)
下面先用科普漫画风格的配图建立直觉(不对应 uv 源码模块名);每张图后附同结构的 Mermaid 流程图,便于检索、复制与二次编辑。可与《Python-环境管理-包管理器-uv》中的背景介绍对照阅读。
图 A 从声明到可运行环境(依赖闭环)

逻辑:先声明(pyproject.toml),再解析出精确版本写入 uv.lock,最后安装进 .venv;全局缓存参与去重加速,包索引(如 PyPI)为解析与下载提供元数据与制品。
1 | flowchart TD |
段末注释:site-packages 为当前解释器加载第三方包的默认目录;后文沿用「缓存」指 uv 在本机的包存储与复用层。
图 B uv run 的执行链(项目内)

执行架构:uv run 先定位项目根与配置,再判断 .venv 是否与锁/声明一致;必要时创建或更新环境,最后在子进程里启动 python 或其它入口(如 pytest)。PEP 723 单文件脚本走类似「先满足脚本元数据再执行」的路径,细节以官方 Scripts 文档为准。
1 | flowchart LR |
图 C CLI 能力分层(单入口下的分工)

架构直觉:对外是一个 uv 二进制;对内可粗分为 项目/锁文件、虚拟环境与安装、Python 解释器管理、隔离工具环境(uvx) 等能力块,它们共享缓存与对索引网络的访问。
1 | flowchart TB |
2. 常用命令地图(按任务记)
以下为分类速查,选项与子命令细节以 uv --help 与官方文档为准。
2.1 安装 uv 本体(以 Linux 为例)
下面以常见 GNU/Linux 发行版为例,给出可照抄的安装与校验流程;其它系统见官方 Installation:https://docs.astral.sh/uv/getting-started/installation/。
环境准备(示例):若尚未安装 curl,在 Debian/Ubuntu 上可先执行 sudo apt update && sudo apt install -y curl;其它发行版用对应的包管理器安装 curl 或 wget 即可。
方式一:官方独立安装脚本(推荐)
依赖:系统已安装 curl 或 wget,且能对公网 HTTPS 访问 astral.sh(企业内网需自行配置代理或镜像策略)。安装前若希望审阅脚本内容,可先:curl -LsSf https://astral.sh/uv/install.sh | less,再决定是否执行安装。
用 curl 一键安装(脚本将二进制装到用户目录,默认多为 ~/.local/bin):
1 | curl -LsSf https://astral.sh/uv/install.sh | sh |
没有 curl 时可用 wget:
1 | wget -qO- https://astral.sh/uv/install.sh | sh |
安装脚本会提示是否把上述目录加入 PATH;若当前 shell 里还找不到命令,可先执行(Bash 示例):
1 | export PATH="$HOME/.local/bin:$PATH" |
校验:
1 | uv --version |
方式二:指定版本安装(示例)
需要与团队或 CI 对齐某一版本时,可把版本号写进 URL(具体版本号以 GitHub Releases 为准):
1 | curl -LsSf https://astral.sh/uv/0.11.7/install.sh | sh |
方式三:通过 PyPI(适合已有 Python 且希望用包管理器管理 uv 自身)
官方建议把 uv 装在隔离环境里,例如 pipx:
1 | pipx install uv |
若临时使用 pip 全局安装(可能与其它全局包混用,一般不优先推荐):
1 | python3 -m pip install --user uv |
安装后常用维护
- 升级(独立安装脚本方式安装的 uv 通常支持):
uv self update - 查看帮助:
uv --help、uv help
段末注释:PATH 为操作系统查找可执行文件的目录列表;HTTPS 为 HTTP 的安全传输层;后文沿用 PATH。
2.2 项目管理:init / add / remove / sync / lock
uv init:在当前目录初始化pyproject.toml(可选模板、包名等)。uv add 包名:把依赖写入pyproject.toml并安装,同时更新锁文件(在使用锁文件的工作流下)。uv remove 包名:从声明中移除并同步环境。uv lock:仅解析并写锁文件,不装环境(适合只想更新锁、或交给 CI 的场景)。uv sync:按pyproject.toml+uv.lock创建/更新.venv并安装,是「拉代码后对齐环境」的主命令。
2.3 运行:uv run
uv run python main.py:在项目环境里执行,无需先source .venv/bin/activate(类 Unix)或手动激活(Windows)。uv run pytest:同理,用项目依赖跑测试命令。
2.4 工具运行:uvx(类比 pipx)
uvx ruff check .:按需准备工具环境并执行,适合 linter、formatter、一次性 CLI。- 心智:不污染当前项目依赖,又不必全局
pip install。
2.5 Python 版本:uv python
uv python install 3.12:安装并管理可用的 Python 解释器(具体行为依平台而定)。uv python pin 3.12:在项目中钉住 minor 版本,配合pyproject.toml/工具链约定,减少「我机器上是 3.11、你的是 3.12」的漂移。
2.6 与 pip 兼容:uv pip ...
uv pip install等子命令提供 pip 兼容路径,便于迁移旧脚本;新项目仍建议以pyproject.toml+uv sync为主。
3. 示例(可复制)
以下示例假设已安装 uv,且当前 shell 在项目根目录。包名与版本仅作演示。
3.1 从零建一个应用项目
1 | uv init myapp |
uv init myapp新建目录并生成pyproject.toml等骨架(也可用uv init在当前目录初始化;库形态见--lib等选项,以官方 Creating projects 文档为准)。uv add声明并安装依赖,并更新uv.lock(在使用锁定工作流时)。uv run在项目环境里执行,无需手动激活 venv。
3.2 克隆已有仓库后对齐环境
1 | git clone <repo-url> && cd <repo> |
- 仓库若已提交
uv.lock,uv sync会把.venv装到与锁文件一致的状态,再跑测试。
3.3 单文件脚本 + 内联依赖(PEP 723 风格)
将依赖写在脚本头部元数据中(PEP 723 内联脚本元数据;键名以官方 Scripts 文档为准),例如:
1 | # /// script |
保存为 script.py 后:
1 | uv run script.py |
- 心智:脚本自描述依赖,
uv run负责准备环境;适合小工具、一次性任务,而不是替代完整项目结构。
3.4 用 uvx 跑一次性工具
1 | uvx ruff check . |
- 不必把 ruff 写进项目依赖,也能在 CI 或本地快速执行(是否固定版本、是否缓存,见
uvx文档选项)。
4. 与上一篇的关系
- 选型、与 Conda/venv 对比:见《Python-环境管理-包管理器-uv》。
- 日常落地:以本文
sync/run/uvx/python pin为骨架,遇到边界情况再查官方 Reference。
把 pyproject.toml → uv.lock → .venv → uv run 串成一条线,uv 的心智模型就基本闭环了;§1.6 用科普漫画先搭直觉,再用 Mermaid 对齐同一套「数据流 + 执行链 + 能力分层」,便于对照记忆。
5. 延伸阅读
- 官方文档:https://docs.astral.sh/uv/
- 仓库:https://github.com/astral-sh/uv
- 姊妹篇(背景与选型):本站《Python-环境管理-包管理器-uv》