跳转到内容

uv 工具

uv 是一个完全使用 Rust 语言开发、设计用于全面替代 pippip-toolsvirtualenv 的新一代现代 Python 依赖与包管理器。其最大的特色是 降维打击般的极速依赖解析与包安装速度


Terminal window
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"

uv 不仅管理包,还能像 pyenv 一样自动化拉取并管理 Python 解释器。

Terminal window
uv python list # 查看本机已安装与云端可安装的 Python 版本
uv python install 3.11 # 拉取并安装特定环境版本
uv python uninstall 3.11 # 彻底卸载
# 自动生成 .venv 虚拟环境并关联 3.11
uv 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)

  1. 声明:在 requirements.in 声明顶层包。
  2. 锁定:运行 pip-compile,将整棵依赖树彻底计算并固化为写有精确版本号的 requirements.txt
  3. 同步:运行 pip-sync,让虚拟环境与 .txt 绝对对齐(多退少补)。

现代 uv 解法 (基于 pyproject.toml)

Terminal window
uv init --python 3.11 # 初始化标准工程结构
uv add requests # 将顶层依赖写入 pyproject.toml
uv 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.lockpyproject.toml该外部工具自身的依赖图谱。
对标工具原生 python <script>poetry run对标 pipx run 或 JS 的 npx

执行实战

Terminal window
# 临时拉起黑盒环境执行远端 langgraph-cli 工具
uvx --from langgraph-cli langgraph.exe
# 如果不想每次都临时拉取,想将其作为全局命令常驻:
uv tool install ruff # 等价于 pipx install ruff