🚀 UV 使用教程 — Python 包管理基础使用指南
uv 是 Astral 团队用 Rust 写的超高速 Python 包管理器,比 pip 快 10-100 倍。它集成了包管理、虚拟环境、Python 版本管理、项目脚本运行等功能,是 pip + venv + pipx + pyenv 的完美替代品。
一、安装 uv
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
irm https://astral.sh/uv/install.ps1 | iex
# 通过 pip 安装(不推荐,但应急可以用)
pip install uv
# 通过 Homebrew (macOS)
brew install uv安装后验证:
uv --version
# uv 0.7.x (2026)💡 安装脚本会自动将 uv 加入 PATH。如果终端找不到命令,重新打开终端或执行source ~/.bashrc/source ~/.zshenv。
二、新建 / 初始化项目
# 新建项目目录并初始化(推荐)
uv init my_project
cd my_project
# 现有目录中初始化
cd existing_project
uv init
# 指定 Python 版本初始化
uv init my_project --python 3.12初始化后会生成以下文件:
my_project/
├── pyproject.toml # 项目配置(核心文件)
├── .python-version # Python 版本锁定
├── hello.py # 示例文件
└── README.mdpyproject.toml 结构说明
[project]
name = "my-project"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = []
[project.scripts]
hello = "hello:main"三、依赖管理(最常用)
安装依赖
# 安装包(自动写入 pyproject.toml + 更新锁文件)
uv add fastapi uvicorn httpx
# 安装指定版本
uv add "requests>=2.28,<3.0"
# 安装开发依赖(写入 [dependency-groups] dev 组)
uv add ruff pytest --dev
# 安装可选依赖
uv add redis --optional cache
# 从 requirements.txt 导入
uv add -r requirements.txt
# 从其他 pyproject.toml / setup.py 导入
uv add -r setup.py卸载依赖
# 卸载包(自动移除依赖 + 更新锁文件)
uv remove fastapi
# 卸载开发依赖
uv remove pytest --dev锁文件 & 环境还原
# 生成 / 更新 uv.lock 锁文件
uv lock
# 按锁文件还原完整环境(部署必备!)
uv sync
# 只安装生产依赖(跳过 dev 组)
uv sync --production
# 安装指定依赖组
uv sync --group test💡 uv.lock 是跨平台锁文件,记录每个包的精确版本和哈希。提交到 Git,团队协作时保证环境一致。查看依赖
# 查看项目依赖树
uv tree
# 查看过期依赖
uv pip list --outdated四、运行命令(无需激活虚拟环境)
uv 自动管理虚拟环境,用 uv run 直接执行,不需要手动 activate。
# 运行 Python 脚本
uv run python main.py
# 运行模块
uv run python -m http.server 8000
# 运行已安装的 CLI 工具
uv run uvicorn main:app --reload
uv run pytest
uv run ruff check .
uv run mypy src/
# 传参(用 -- 分隔)
uv run python main.py -- --debug --port 8080💡 uv run 首次运行时会自动创建虚拟环境并同步依赖,后续直接使用缓存,速度极快。五、Python 版本管理(替代 pyenv)
# 安装指定 Python 版本
uv python install 3.11
uv python install 3.12 3.13
# 安装最新稳定版
uv python install
# 为当前项目绑定 Python 版本(写入 .python-version)
uv python pin 3.12
# 查看可用的 Python 版本
uv python list
# 查看已安装的版本
uv python list --only-installed
# 查找 Python 可执行文件路径
uv python find
# 卸载某个版本
uv python uninstall 3.10💡 uv 可以自动下载并使用你从未安装过的 Python 版本,无需提前手动安装。项目需要 3.11?uv 自己搞定。
六、兼容 pip 模式
如果不想改项目结构,可以把 uv 当作 pip 的高速替代:
# 等价于 pip install(但快 10-100x)
uv pip install fastapi uvicorn
# 安装到指定环境
uv pip install fastapi --python .venv/bin/python
# 从 requirements.txt 安装
uv pip install -r requirements.txt
# 导出依赖为 requirements.txt(兼容旧工具链)
uv pip freeze > requirements.txt
# 编译 pyproject.toml 为 requirements.txt(含完整依赖树)
uv pip compile pyproject.toml -o requirements.txt
# 编译并包含 dev 依赖
uv pip compile pyproject.toml --extra dev -o requirements-dev.txt
# 查看已安装的包
uv pip list
# 查看某个包的详情
uv pip show fastapivenv 管理
# 创建虚拟环境
uv venv
# 指定 Python 版本创建
uv venv --python 3.12
# 指定目录名
uv venv .my-venv --python 3.11七、全局工具(替代 pipx)
# 全局安装 CLI 工具(隔离环境,不污染项目)
uv tool install ruff
uv tool install black
uv tool install pre-commit
# 临时运行一次(不安装,用完即焚)
uvx ruff check .
uvx httpie GET httpbin.org/get
uvx cookiecutter gh:audreyr/cookiecutter-pypackage
# 查看已安装的全局工具
uv tool list
# 升级全局工具
uv tool upgrade ruff
# 卸载全局工具
uv tool uninstall ruff
# 运行全局工具
uv tool run ruff check --fix .
# 或简写
uvx ruff check --fix .💡uvx=uv tool run,类似npx,临时执行一个工具而不用全局安装。
八、代码质量(配合 ruff)
uv 内置推荐搭配 Ruff(同样是 Astral 出品,Rust 实现的超快 linter + formatter):
# 检查代码问题并自动修复
uv run ruff check --fix .
# 检查但不自动修复(CI 用)
uv run ruff check .
# 格式化代码
uv run ruff format .
# 检查 + 格式化一键搞定
uv run ruff check --fix . && uv run ruff format .
# 在 pyproject.toml 中配置 Ruffpyproject.toml 中的 Ruff 配置
[tool.ruff]
line-length = 88
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP"]
ignore = ["E501"]
[tool.ruff.format]
quote-style = "double"九、部署 / 生产常用
# 只安装生产依赖(跳过 dev/test 组)
uv sync --production
# 导出精简版 requirements.txt(用于 Docker 等场景)
uv pip compile pyproject.toml -o requirements.txt --no-annotate
# 在 Docker 中使用(官方推荐镜像)
# Dockerfile 示例:Dockerfile 示例
FROM python:3.12-slim
# 安装 uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
# 复制项目文件
WORKDIR /app
COPY pyproject.toml uv.lock ./
# 安装依赖(仅生产)
RUN uv sync --production --no-dev --no-install-project
# 复制源码
COPY . .
# 运行
CMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]十、工作流(Workspaces)— 多项目管理
适用于 monorepo 或微服务场景:
# 根目录 pyproject.toml
[tool.uv.workspace]
members = [
"packages/*",
"services/*",
]# packages/auth/ → 共享认证库
# packages/models/ → 共享数据模型
# services/api/ → API 服务
# services/worker/ → 后台任务
# 同步整个 workspace
uv sync十一、依赖分组(Dependency Groups)
# 添加不同分组的依赖
uv add pytest --group test
uv add sphinx --group docs
uv add ipython --group dev
# 安装指定分组
uv sync --group test
uv sync --group docs
# 安装多个分组
uv sync --group dev --group testpyproject.toml 中对应:
[dependency-groups]
dev = ["ruff", "mypy"]
test = ["pytest", "pytest-cov"]
docs = ["sphinx", "sphinx-rtd-theme"]十二、常用命令速查表
| 命令 | 说明 |
|---|---|
uv init | 初始化项目 |
uv add <pkg> | 添加依赖 |
uv remove <pkg> | 移除依赖 |
uv sync | 同步环境(按锁文件) |
uv lock | 生成/更新锁文件 |
uv run <cmd> | 在项目环境中运行命令 |
uv python install <ver> | 安装 Python 版本 |
uv python pin <ver> | 锁定项目 Python 版本 |
uv python list | 查看可用 Python 版本 |
uv venv | 创建虚拟环境 |
uv tool install <pkg> | 全局安装工具 |
uvx <cmd> | 临时运行工具 |
uv pip install <pkg> | pip 兼容模式安装 |
uv pip freeze | 导出依赖列表 |
uv pip compile | 编译为 requirements.txt |
uv tree | 查看依赖树 |
uv self update | 更新 uv 自身 |
十三、常见问题
Q: uv 和 pip 的区别是什么?
uv 用 Rust 写的,速度快 10-100 倍;自带虚拟环境管理、Python 版本管理、锁文件;一个工具搞定 pip + venv + pipx + pyenv。
Q: 需要手动激活虚拟环境吗?
不需要!uv run 会自动使用项目虚拟环境。如果非要用 source .venv/bin/activate 也行,但没必要。
Q: 已有项目如何迁移到 uv?
cd existing_project
uv init
uv add -r requirements.txt
# 或者直接用 pip 兼容模式
uv pip install -r requirements.txtQ: uv.lock 和 requirements.txt 有什么区别?
uv.lock 是 uv 的原生锁文件,包含完整依赖树、哈希校验、跨平台信息。requirements.txt 是传统格式。建议提交 uv.lock,仅在需要兼容旧工具链时导出 requirements.txt。
Q: 如何加速 CI/CD?
# GitHub Actions 示例
- uses: astral-sh/setup-uv@v5
- run: uv sync
- run: uv run pytestuv 的全局缓存 + 锁文件能让 CI 依赖安装从几分钟降到几秒。
参考链接
- 官方文档:https://docs.astral.sh/uv/
- GitHub:https://github.com/astral-sh/uv
- Ruff(配套 linter):https://docs.astral.sh/ruff/
- Pydantic(推荐 ORM):https://docs.pydantic.dev/
评论已关闭