pip VS uv
uv 和 pip 的核心区别在于:pip 是 Python 官方的基础包安装工具,而 uv 是一个用 Rust 编写的、速度极快且功能全面的现代替代品,旨在取代 pip 以及 venv、pyenv 等多个工具。
可以把 uv 看作是 pip 的“高速进化版”,但它的野心远不止于此。它们在几个关键维度上有显著不同:
| 维度 | pip | uv |
|---|---|---|
| 定位与角色 | Python 官方标准的包管理器,专注于从 PyPI 安装和卸载包。 | 新一代的“一体化”Python 项目管理工具,目标是替代 pip、venv、pip-tools、pyenv 等多个工具。 |
| 核心性能 | 相对较慢。依赖解析和安装在大项目中可能耗时数分钟。 | 速度极快。用 Rust 编写,依赖解析和安装速度号称比 pip 快 10 到 100 倍。安装依赖通常是毫秒级体验。 |
| 环境管理 | 不直接管理。需要手动配合 venv 或 virtualenv 创建和管理虚拟环境。 |
内置集成。通过 uv venv 命令即可快速创建轻量级虚拟环境,并可自动使用。 |
| 依赖锁定与项目配置 | 依赖通常通过手动维护的 requirements.txt 管理,原生不支持精确的锁文件(需借助 pip-tools)。 |
原生支持标准的 pyproject.toml 项目配置文件,并能自动生成和维护跨平台的 uv.lock 锁文件,确保环境一致性。 |
| 功能范围 | 单一功能:仅负责包安装与卸载。 | 功能全面:除包管理外,还内置了 Python 版本管理(类似 pyenv)、项目初始化、脚本运行(uv run)等丰富功能。 |
⚡️ 为什么 uv 这么快?
uv 的性能优势主要源于其架构设计:
-
底层语言:使用性能极高的 Rust 语言编写。
-
并行处理:采用多线程并发下载,并能并行解析复杂的依赖关系树,而不是像
pip那样串行处理。
🤔 如何选择?
-
继续使用
pip的场景:如果你只是在写一个简单的单文件脚本,或者需要兼容一个有着严格要求的、基于requirements.txt的传统项目,那么pip仍然是一个稳定且足够的选择。 -
强烈推荐尝试
uv的场景:-
任何新启动的 Python 项目。
-
对安装和构建速度有要求的 CI/CD 流水线或开发环境。
-
需要团队协作,希望彻底解决“在我电脑上能跑”的环境一致性问题。
-
想体验现代化、高效、省心的 Python 项目工作流。
-
由于 uv 提供了 uv pip 命令,它与 pip 的 CLI 高度兼容,学习成本极低。即使你暂时不想完全切换到新工作流,也可以先用 uv pip install 来代替 pip install,单纯地体验一下“飞”一般的感觉。
uv 的命令行接口(CLI)设计得很有条理,按功能分成了几个清晰的类别,方便你根据不同的任务找到对应的命令。
为了方便你快速查阅,我把主要的命令整理成了下面的表格:
| 命令分类 | 命令 (示例) | 作用 | 关键选项/备注 |
|---|---|---|---|
| 项目管理 (现代化工作流) |
uv init-3-6-8 |
在当前或指定目录创建一个新的 Python 项目,生成pyproject.toml等文件。 |
--package 创建可发布的包结构-8。 |
uv add <package>-1-3-6 |
向项目添加依赖,并自动更新pyproject.toml和锁文件uv.lock。 |
--dev 将依赖添加到开发依赖组-1-8。 |
|
uv remove <package>-1-3-6 |
从项目中移除依赖。 | 同时更新锁文件。 | |
uv sync-6-8 |
将项目环境与uv.lock文件完全同步,安装或卸载必要的包。 |
--all-groups 安装所有依赖组-8。 |
|
uv lock-6-8 |
更新项目的uv.lock锁文件,但不会安装包。 |
--upgrade-package <pkg> 升级特定包-3。 |
|
uv run <command>-3-6-8 |
最核心的命令之一。在项目的虚拟环境中运行命令或脚本(如uv run python script.py),环境会自动同步-3。 |
无需手动激活虚拟环境。 | |
uv build-3-6-8 |
构建当前项目的分发包,在dist/目录生成.whl和.tar.gz文件-3。 |
||
uv tree-6 |
以树形结构展示项目的依赖关系。 | ||
uv export-6-12 |
将锁文件导出为其他格式,如requirements.txt-12。 |
--format requirements-txt-12 |
|
uv version-3-6 |
查看或更新项目的版本号-3。 | ||
| 环境管理 | uv venv-5-6-9 |
创建一个新的虚拟环境。 | 替代 python -m venv-9。 |
| Python 版本管理 | uv python install <version>-6-8-9 |
安装指定版本的 Python 解释器。 | uv python install 3.12 |
uv python list-6-8-9 |
列出可用的或已安装的 Python 版本。 | ||
uv python pin <version>-6-8 |
为项目锁定一个 Python 版本,写入.python-version文件。 |
||
| 工具管理 | uv tool run <tool> (或 uvx)-6-8 |
在临时、隔离的环境中运行一个 Python 工具(如uvx ruff check .),无需全局安装。 |
|
uv tool install <tool>-6-8 |
全局安装一个工具。 | ||
| Pip 兼容接口 | uv pip install <package>-2-5-6 |
在当前激活的环境安装包,与pip语法完全兼容,但速度更快。 |
这是 uv 为了兼容旧工作流提供的接口。 |
uv pip uninstall-2-5-6 |
卸载包。 | ||
uv pip list-5-12 |
列出已安装的包。 | ||
uv pip freeze-5-6 |
以requirements.txt格式列出已安装的包。 |
||
uv pip show-5-6-7 |
显示特定包的详细信息。 | ||
uv pip check-5-6-7 |
检查环境中所有包的依赖是否兼容。 | ||
uv pip compile-5-6 |
从requirements.in编译生成requirements.txt锁文件。 |
||
uv pip sync-5-6 |
将当前环境与requirements.txt文件同步。 |
||
| 缓存与维护 | uv cache clean-6-12 |
清理 uv 的缓存。 | |
uv cache dir-6-12 |
显示 uv 缓存目录的路径。 | ||
uv self update-6-9-12 |
将 uv 自身更新到最新版本。 | ||
| 常用通用选项 | uv --version-1-9 |
查看 uv 的版本号。 | |
uv --help-1-4 |
查看所有命令的帮助信息。 | uv help <command> 查看特定命令帮助-1。 |
|
uv --no-cache-1-4 |
在本次命令中禁用缓存。 |
💡 核心工作流对比:uv pip vs uv add
理解下面这点,就能抓住 uv 的精髓:
浙公网安备 33010602011771号