文章目录
- 为什么需要 uv
- 核心优势
- 安装
- 快速上手
- 1) 项目管理(推荐默认用法)
- 2) 脚本内联依赖(小工具很方便)
- 3) 工具安装与临时运行(替代 pipx)
- 4) Python 版本管理(替代 pyenv)
- 5) 保留熟悉的 pip 流程(可选)
- 适用场景
- 与传统方式的简要对比
- 小结
uv 是由 Astral(Ruff 的作者)开发的统一型 Python 包与项目管理器。目标是用一个工具替代常见的多件套:
pip
(安装)、
pip-tools
(依赖锁定)、
virtualenv
(虚拟环境)、
poetry
(项目管理)、
pipx
(工具安装)、
pyenv
(Python 版本管理)、
twine
(发布)。
为什么需要 uv
- 统一入口:包管理、依赖锁定、虚拟环境、工具安装、Python 版本管理与发布,一站式完成。
- 兼容现有习惯:提供与
pip
兼容的子命令,迁移成本低。 - 适配个人与团队:本地开发、脚本化工具、CI/CD、团队一致性,都能覆盖。
核心优势
- 速度很快:Rust 实现 + 并行下载/安装 + 智能缓存。相较传统
pip
场景普遍更快。 - 体验简单:一个工具覆盖多职责;
uv run
自动使用项目虚拟环境,少切换、少心智负担。 - 空间高效:全局缓存与包去重,减少重复下载和磁盘占用。
- 可移植:
uv.lock
提供跨平台一致的依赖锁定结果。 - 兼容生态:保留熟悉的
pip
流程,同时提供更高层的项目与版本管理能力。
安装
# macOS / Linux(推荐)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Homebrew(macOS)
brew install uv
快速上手
1) 项目管理(推荐默认用法)
# 创建项目骨架
uv init my-project
cd my-project
# 添加依赖(自动创建 .venv)
uv add requests
# 运行命令(无需手动激活虚拟环境)
uv run python main.py
# 锁定与同步依赖
uv lock
uv sync
项目结构(简化):
my-project/
├── pyproject.toml
├── uv.lock
├── README.md
└── src/
└── my_project/
└── __init__.py
2) 脚本内联依赖(小工具很方便)
echo 'print("hello uv")' > example.py
uv add --script example.py requests
uv run example.py
脚本会被写入最小依赖元数据,例如:
# /// script
# requires-python = ">=3.8"
# dependencies = ["requests"]
# ///
import requests
print("ok", bool(requests))
3) 工具安装与临时运行(替代 pipx)
# 临时执行(一次性)
uvx pycowsay 'hello'
# 全局安装工具
uv tool install ruff
ruff --version
4) Python 版本管理(替代 pyenv)
# 安装多个版本
uv python install 3.10 3.11
# 为当前项目创建指定版本的虚拟环境
uv venv --python 3.11
# 在目录内固定 Python 版本
uv python pin 3.11
5) 保留熟悉的 pip 流程(可选)
# 生成 requirements.txt(依赖锁定)
uv pip compile requirements.in --output-file requirements.txt
# 创建虚拟环境并同步依赖
uv venv
uv pip sync requirements.txt
适用场景
- 新项目:直接用 uv 起步,减少工具切换与配置复杂度。
- 追求速度的环境:本地开发/CI/CD 中的安装、同步、锁定更快。
- 多 Python 版本场景:一处管理、跨项目复用,避免额外装
pyenv
。 - 脚本与命令行工具:脚本内联依赖和
uvx
让一次性工具更轻量。 - 团队协作:用
uv.lock
保证不同平台依赖一致,降低“在我机子上能跑”的问题。
与传统方式的简要对比
- 初始化:手动创建目录/venv →
uv init
一步到位。 - 虚拟环境:手动激活/切换 →
uv run
自动使用项目环境。 - 依赖锁定:
pip freeze
/平台差异 →uv.lock
跨平台一致。 - 工具运行:
pipx
/临时安装 →uvx
一次性运行或uv tool install
全局安装。 - Python 版本:另装
pyenv
→uv python
原生管理。
提示:若仍偏好手动激活 venv,可使用:
uv venv .venv
source .venv/bin/activate
但更推荐在项目内直接:
uv run python main.py
注意:在我使用的过程发现,当先通过 uv init
初始化一个项目,并在这个项目中通过 uv run
运行任意一个脚本会生成 .venv
,但是无法通过 source .venv/bin/activate
激活虚拟环境。如果想通过 source .venv/bin/activate
激活虚拟环境,只能使用第一种方法。
小结
如果你希望简化 Python 项目与环境管理、提升依赖安装速度,并减少在 pip/venv/pipx/pyenv/poetry
之间切换的成本,uv 是一个非常值得默认采用的选择。它兼顾了速度、兼容性与可移植性,适合个人开发者与团队协作环境。
参考文档:https://docs.astral.sh/uv/