在 Python 开发中,你是否常被工具碎片化困扰?安装依赖用 pip,管理项目用 poetry,切换 Python 版本靠 pyenv,运行独立工具需 pipx…… 工具链的割裂让效率大打折扣。今天我们要聊的 uv,正是为终结这种混乱而生 —— 这个用 Rust 编写的全能工具,集成了包管理、项目管理、版本控制等核心功能,用一套统一的命令体系重构开发流程。本文将基于官方资料,完整解析 uv 的核心命令与使用逻辑,帮你快速掌握这个 "Python 工具集终结者"。
uv.lock
、Cargo 风格工作区、全局依赖缓存(节省 50% 以上磁盘空间)bash
# 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 --version
验证,首次运行会自动配置全局缓存目录(默认~/.cache/uv
)。
支持通过 Homebrew(macOS)、pip(需 Python 3.7+)等方式安装,具体可查阅官方安装文档。
bash
uv init my_project # 生成标准项目结构,含pyproject.toml
cd my_project # 进入项目目录
自动创建的pyproject.toml
遵循 PEP 621 标准,支持直接编辑依赖声明。
bash
uv add requests # 自动写入pyproject.toml,支持版本约束(如requests>=2.26.0)
uv add "httpx[http2]" # 安装带额外功能的依赖
bash
uv lock # 生成uv.lock,记录所有依赖的精确哈希和版本
bash
uv sync # 按uv.lock安装依赖,自动创建/激活虚拟环境
bash
uv run python main.py # 在项目环境中运行命令,无需手动激活venv
uv run pytest # 直接运行测试框架,自动加载项目依赖
bash
uv tree # 可视化依赖关系,排查版本冲突(类似pipdeptree)
bash
uv build # 生成sdist和wheel包,替代setuptools.setup()
uv publish # 发布到PyPI,需提前配置.pypirc
针对独立脚本(如临时工具、数据脚本),uv 提供专属解决方案:
bash
# 创建脚本并添加依赖(自动写入内联元数据)
echo 'import requests; print(requests.get("https://astral.sh"))' > script.py
uv add --script script.py requests # 在脚本头部添加# uv dependencies: requests
bash
uv run script.py # 自动创建临时venv,安装依赖并运行
# 等价于:uv venv create --script && pip install requests && python script.py
bash
uv remove --script script.py requests # 移除脚本依赖
uv lock --script script.py # 为单文件生成独立锁文件
bash
uv python install 3.10.12 3.11.6 # 同时安装多个版本
uv python list # 查看所有已安装版本(含pypy等变种)
uv python uninstall 3.10.12 # 卸载指定版本
bash
uv python pin 3.11 # 将当前项目固定为Python 3.11(写入.pyenv-version)
uv venv --python 3.12.0 # 创建指定版本的虚拟环境
bash
uv python find --latest 3.11 # 查找最新的3.11补丁版本
uv python find --pypy 3.8 # 查找pypy 3.8版本(需提前配置源)
bash
uvx ruff check . # 等价于uv tool run ruff check .
# 自动创建临时环境,运行后清理,适合偶尔使用的工具
bash
uv tool install black # 安装到用户级目录,加入系统PATH
black --version # 直接运行,无需前缀uv
uv tool update-shell # 自动更新shell配置(解决PATH未生效问题)
bash
uv tool list # 查看已安装工具
uv tool uninstall black # 卸载工具
uv tool dir # 查看工具安装目录(默认~/.local/share/uv/tools)
bash
uv pip compile requirements.in --universal # 生成平台无关的锁定文件
uv pip sync requirements.txt # 按锁定文件同步环境(自动处理版本冲突)
bash
uv venv # 创建当前目录的虚拟环境(默认使用项目Python版本)
uv pip list # 查看环境内已安装包(替代pip list)
uv pip freeze # 生成requirements.txt(兼容传统部署)
bash
uv pip show requests # 查看包详细信息
uv pip check # 检测依赖冲突(比pip自带检查更精准)
bash
uv cache clean # 清理所有缓存(释放磁盘空间)
uv cache prune # 移除过时缓存(保留常用版本)
uv cache dir # 查看缓存目录路径(可手动清理旧版本)
toml
# pyproject.toml中配置工作区
[workspace]
members = ["subproject1", "subproject2"]
bash
uv add --workspace requests # 为所有子项目添加依赖
uv sync --workspace # 同步整个工作区的依赖
bash
uv self update # 升级到最新版本(无需重新安装脚本)
uv --version # 查看当前版本及Rust编译信息
功能场景 | 传统工具组合 | uv 单一命令 |
---|---|---|
项目初始化 | poetry new + virtualenv | uv init |
依赖锁定 | pip-tools (compile + sync) | uv lock + uv sync |
工具临时运行 | pipx run | uvx |
Python 版本切换 | pyenv + virtualenv | uv python pin |
全局工具安装 | pip install --user | uv tool install |
依赖树查看 | pipdeptree | uv tree |
uv 的价值不仅在于速度提升,更重要的是通过功能整合让开发者专注于代码本身,而非工具切换。当项目管理、依赖解析、版本控制都能用一套统一的命令体系完成时,我们终于可以摆脱 "工具工程师" 的困境,把精力放回业务逻辑和算法实现上。
现在就尝试用uv init
创建你的第一个项目,体验 Rust 带来的丝滑操作吧!如果在使用中遇到具体问题,欢迎在评论区留言,觉得文章实用的话,别忘了点赞收藏,关注我们获取更多硬核开发工具解析