入门
官方文档:https://docs.astral.sh/uv/getting-started/
中文文档:https://hellowac.github.io/uv-zh-cn/
参考文档:https://www.cnblogs.com/wang_yb/p/18635441
安装uv
推荐使用官方安装脚本,无需预先安装 Python,uv 是独立的 Rust 二进制文件。
安装:
# 官方推荐方式(自动安装到 ~/.local/bin)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 或使用 pip 安装(若已有 pip)
pip install uv
# 验证安装
uv --version更新/卸载:
# 更新uv
uv self update
# 卸载uv
rm -f ~/.local/bin/uv
rm -rf ~/.local/share/uv核心概念
理解 uv 的三层模型,可以更清晰地规划你的环境策略:

ℹ️ 关键文件:
pyproject.toml声明项目元数据和依赖,
uv.lock是跨平台确定性锁文件(提交到 Git),.python-version指定项目 Python 版本。
Python版本管理
安装Python
uv 内置 Python 版本管理。所有版本独立存储,互不干扰。
# 查看所有可安装版本
uv python list
uv python list --all-versions
# 安装指定版本
uv python install 3.12
uv python install 3.11 3.10 3.9 # 同时安装多个
uv python install 3.13t # 安装 Free-threaded 版本
# 查看已安装版本
uv python list --only-installed
# 卸载某个版本
uv python uninstall 3.9支持的版本矩阵:

版本切换
uv 采用就近查找原则:当前目录 .python-version → 父目录逐级查找 → 全局默认。
# 在当前命令临时指定版本
uv run --python 3.11 python script.py
uv run --python 3.10 -c "import sys; print(sys.version)"
# 为当前目录/项目固定版本(写入 .python-version)
uv python pin 3.12
cat .python-version # 输出: 3.12
# 用指定版本创建虚拟环境
uv venv --python 3.11 .venv
# 查看当前环境使用的 Python
uv python find
uv run python --versionℹ️ 版本指定格式:
3.12(最新补丁)、3.12.3(精确版本)、cpython@3.12(明确实现)、pypy@3.10(PyPy)
版本锁定
在 pyproject.toml 中声明版本约束
# pyproject.toml
[project]
name = "my-app"
version = "0.1.0"
requires-python = ">=3.11" # 最低版本要求
# requires-python = ">=3.11,<3.13" # 范围约束
dependencies = [
"fastapi>=0.100",
"uvicorn",
]✅ 最佳实践:将
.python-version文件提交到 Git,让团队成员和 CI/CD 使用完全相同的 Python 版本。uv.lock同样应该提交。
环境隔离
虚拟环境
每个项目拥有独立的 .venv,依赖完全隔离。uv 会自动检测并激活当前目录下的虚拟环境。
# 创建虚拟环境(默认在 .venv/)
uv venv
uv venv --python 3.12 # 指定 Python 版本
uv venv /path/to/myenv # 自定义路径
# 激活 / 停用
source .venv/bin/activate
deactivate
# 无需激活,直接用 uv run 在隔离环境中运行
uv run python script.py
uv run pytest
uv run --isolated python script.py # 完全隔离(不继承系统包)
# 在特定虚拟环境中安装包
uv pip install requests --python /path/to/myenv/bin/python💡 推荐:优先使用
uv run而非手动source activate。uv run会自动找到并使用当前项目的虚拟环境,更加安全可靠。
项目管理(推荐工作模式)
uv 的项目模式类似 Poetry,以 pyproject.toml 为中心,是多项目隔离的最佳实践。
# 新建项目(自动生成 pyproject.toml、.python-version、src/)
uv init my-project
cd my-project
# 在现有目录初始化
uv init
uv init --app # 应用程序模板
uv init --lib # 库模板(带 src/ 布局)
uv init --script myscript.py # 单文件脚本(带内联依赖)多项目目录结构示例:
~/projects/
├── project-a/ # Python 3.12,FastAPI 项目
│ ├── .python-version # → 3.12
│ ├── pyproject.toml
│ ├── uv.lock
│ └── .venv/ # 独立环境,互不干扰
├── project-b/ # Python 3.11,数据科学项目
│ ├── .python-version # → 3.11
│ ├── pyproject.toml
│ ├── uv.lock
│ └── .venv/
└── project-c/ # Python 3.10,遗留项目
├── .python-version # → 3.10
└── .venv/✅ 每个项目的
.venv完全独立。cd 进哪个目录,uv run 就使用哪个环境,无需任何手动切换操作。
典型工作流
新项目从0开始:
# 1. 创建项目
uv init my-api && cd my-api
# 2. 锁定 Python 版本
uv python pin 3.12
# 3. 添加依赖(自动更新 pyproject.toml 和 uv.lock)
uv add fastapi uvicorn pydantic
# 4. 添加开发依赖
uv add --dev pytest ruff mypy
# 5. 运行项目
uv run uvicorn main:app --reload
# 6. 提交到 Git
git add pyproject.toml uv.lock .python-version
git commit -m "init project"克隆已有项目:
git clone https://github.com/xxx/project && cd project
# 一键同步:自动安装 Python + 创建 venv + 安装依赖
uv sync
# 含开发依赖
uv sync --dev
# 直接运行(uv 会自动 sync)
uv run python main.py依赖管理
添加依赖
# 添加依赖
uv add requests
uv add "django>=4.2"
uv add "numpy>=1.24,<2.0"
# 添加可选依赖组
uv add --dev pytest black ruff # 开发组
uv add --group docs sphinx mkdocs # 自定义分组
# 从 Git / 本地路径安装
uv add "git+https://github.com/user/repo"
uv add --editable ../my-local-lib # 可编辑安装
# 删除依赖
uv remove requests
# 升级依赖
uv lock --upgrade-package requests # 升级单个
uv lock --upgrade # 升级全部
uv sync # 应用到环境
# 从 requirements.txt 迁移
uv add -r requirements.txt锁文件与可复现环境
uv.lock 是跨平台的确定性锁文件,记录所有依赖的精确版本和哈希值。
# 生成/更新锁文件(不安装)
uv lock
# 根据锁文件严格安装(CI/CD 推荐)
uv sync --frozen # 不允许更新锁文件
uv sync --no-dev # 不安装开发依赖(生产用)
# 导出 requirements.txt(兼容其他工具)
uv export -o requirements.txt
uv export --no-dev -o requirements-prod.txt
# 查看依赖树
uv tree
uv tree --depth 2✅ Git 策略:
uv.lock应提交到版本控制(确保复现性),但.venv/应写入.gitignore。
全局工具管理(替代 pipx)
uv 内置 pipx 功能,每个工具安装在独立的隔离环境中,不污染全局。
# 安装全局工具
uv tool install ruff
uv tool install black
uv tool install httpie
uv tool install --python 3.11 some-tool # 指定版本
# 临时运行(不安装,使用完即销毁)
uvx ruff check .
uvx black --check .
uvx --from httpie http GET https://api.example.com
# 管理工具
uv tool list # 查看已安装工具
uv tool upgrade ruff # 升级工具
uv tool upgrade --all # 升级所有工具
uv tool uninstall black # 卸载工具速查
命令速查

实用技巧 & 进阶用法
内联脚本依赖(PEP 723):
uv 支持在单文件脚本中声明依赖,无需项目目录:
#!/usr/bin/env -S uv run
# /// script
# requires-python = ">=3.11"
# dependencies = ["requests", "rich"]
# ///
import requests
from rich import print
data = requests.get("https://api.github.com").json()
print(data)uv run my_script.py # uv 自动创建临时环境并安装依赖
chmod +x my_script.py && ./my_script.py # 也可直接执行Workspace 多包管理(Monorepo):
# 根目录 pyproject.toml
[tool.uv.workspace]
members = ["packages/*", "services/*"]uv sync --package my-service # 仅同步某个子包
uv run --package my-service pytest # 在子包中运行命令国内镜像源 & 环境变量:
# 自定义缓存目录(默认 ~/.cache/uv)
export UV_CACHE_DIR=/data/uv-cache
# 设置国内镜像源(加速下载)
export UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"
# 或在 pyproject.toml 中配置:
# [[tool.uv.index]]
# url = "https://pypi.tuna.tsinghua.edu.cn/simple"
# 离线模式(使用缓存)
uv sync --offline
# 显示详细输出
uv sync -vCI/CD 最佳实践(GitHub Actions):
# .github/workflows/test.yml
- uses: astral-sh/setup-uv@v4
with:
version: "latest"
- name: Install dependencies
run: uv sync --frozen --no-dev
- name: Run tests
run: uv run pytest缓存管理:
uv cache dir # 查看缓存目录
uv cache info # 查看缓存大小
uv cache clean # 清理所有缓存
uv cache prune # 清理旧版本缓存(保留当前使用的)迁移参考

ℹ️ uv 的
uv pip子命令完全兼容 pip 接口,可作为直接替代使用,同时享受 10~100× 的速度提升。
【开发环境】最强Python管理器uv
https://qiyec.site/archives/weCClg1h