uv 工具
1. 工具定位与核心优势
Section titled “1. 工具定位与核心优势”uv 是一个完全使用 Rust 语言开发、设计用于全面替代 pip、pip-tools 和 virtualenv 的新一代现代 Python 依赖与包管理器。其最大的特色是 降维打击般的极速依赖解析与包安装速度。
2. 极速安装与底层环境配置
Section titled “2. 极速安装与底层环境配置”export UV_INSTALL_DIR="/opt/software/uv"# macOS/Linux 极速安装curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell) 安装powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"3. 解释器与独立虚拟环境管理
Section titled “3. 解释器与独立虚拟环境管理”uv 不仅管理包,还能像 pyenv 一样自动化拉取并管理 Python 解释器。
uv python list # 查看本机已安装与云端可安装的 Python 版本uv python install 3.11 # 拉取并安装特定环境版本uv python uninstall 3.11 # 彻底卸载
# 自动生成 .venv 虚拟环境并关联 3.11uv venv --python 3.11(注:项目通常会生成一个 .python-version 文件,uv 会自动识别并约束当前项目环境。)
4. 现代工程化依赖管理 (替代 pip-tools 与 Poetry)
Section titled “4. 现代工程化依赖管理 (替代 pip-tools 与 Poetry)”4.1. 依赖锁定的痛点与演进:为什么要 Lock?
Section titled “4.1. 依赖锁定的痛点与演进:为什么要 Lock?”由于包的 传递性依赖 (Transitive Dependencies),子依赖默认会去拉取其最新的兼容版本。这极易导致 版本漂移 (Version Drift):昨天还能跑通的项目,今天在另一台机器上 pip install 就因为某个深层子依赖更新而崩溃。
传统解法 (pip-tools):
- 声明:在
requirements.in声明顶层包。 - 锁定:运行
pip-compile,将整棵依赖树彻底计算并固化为写有精确版本号的requirements.txt。 - 同步:运行
pip-sync,让虚拟环境与.txt绝对对齐(多退少补)。
现代 uv 解法 (基于 pyproject.toml):
uv init --python 3.11 # 初始化标准工程结构uv add requests # 将顶层依赖写入 pyproject.tomluv lock # 解析全依赖树,生成绝对锁定的 uv.lock 文件uv sync # 高速同步当前虚拟环境的包,确保与 uv.lock 100% 对齐uv tree # 终端内树状打印依赖层级结构5. 工具与脚本的运行流派 (run vs tool run / uvx)
Section titled “5. 工具与脚本的运行流派 (run vs tool run / uvx)”uv 在执行层面做了严格的隔离划分:
| 评估维度 | uv run <command> | uv tool run <tool> (快捷方式 uvx) |
|---|---|---|
| 主要用途 | 运行 项目内部代码 (如 uv run main.py),或 项目依赖中 注册的指令 (如 uv run pytest)。 | 运行 全局独立、外部 的终端工具 (如 ruff, black, httpie)。 |
| 环境焦点 | 绑定并激活当前项目的持久虚拟环境 (.venv)。 | 每次动态拉起一个 零污染、高度隔离 的临时环境。 |
| 依赖来源 | 项目自身的 uv.lock 或 pyproject.toml。 | 该外部工具自身的依赖图谱。 |
| 对标工具 | 原生 python <script> 或 poetry run。 | 对标 pipx run 或 JS 的 npx。 |
执行实战:
# 临时拉起黑盒环境执行远端 langgraph-cli 工具uvx --from langgraph-cli langgraph.exe
# 如果不想每次都临时拉取,想将其作为全局命令常驻:uv tool install ruff # 等价于 pipx install ruff