本文最后更新于 2026年5月4日。
简单来说,这两个命令的区别在于你是想临时用一下,还是想把这个包永久留在项目里。uv 的设计理念是将“项目管理”与“底层的 pip 工具”区分开。
以下是详细的对比分析:
1. uv add (推荐用于项目)
这是 uv 作为项目管理器的核心命令。它的行为类似于 npm install 或 poetry add。
-
修改配置文件: 它会自动把
pywin32写入项目目录下的pyproject.toml文件中。 -
更新锁文件: 它会同步更新
uv.lock,确保团队其他成员运行uv sync时,安装的版本和你完全一致。 -
自动管理环境: 如果当前没有虚拟环境,它会自动创建一个。
-
适用场景: 你正在开发一个项目(比如一个自动化脚本、一个 Web 应用),并且希望这个项目以后在其他地方也能正常运行。
2. uv pip install (底层兼容工具)
这是 uv 提供的 pip 替代品,旨在提供极致的安装速度。
-
只负责安装: 它仅仅把包下载并解压到当前的虚拟环境中。
-
不记录依赖: 它不会修改
pyproject.toml,也不会更新uv.lock。一旦你删除了虚拟环境,没有任何记录能告诉你之前装过什么。 -
需要手动管理环境: 它通常要求你已经激活了某个虚拟环境,或者通过
--python指定路径。 -
适用场景: 临时测试一个包、在没有
pyproject.toml的简单脚本环境中使用,或者在现有的老旧工作流中替代原有的pip命令。
核心区别对比表
| 特性 | uv add pywin32 | uv pip install pywin32 |
|---|---|---|
| 持久化 | 永久记录在 pyproject.toml |
仅限当前环境,无记录 |
| 可复现性 | 高(通过 uv.lock 锁定版本) |
低(换个机器就得重新手动装) |
| 依赖解析 | 自动解析并锁定整个依赖树 | 仅解析当前安装的包 |
| 使用逻辑 | 现代项目管理流 | 传统 Pip 兼容流 |
| 主要目标 | 维护项目的生命周期 | 快速安装二进制包 |
什么时候该用哪一个?
-
如果你在写一个正式的项目: 始终使用
uv add。这样当你把代码传给同事或部署到服务器时,别人只需要输入uv sync就能还原所有环境。 -
如果你只是想随便试个 Demo: 或者你在一个没有初始化
uv项目的文件夹里,只想快速装个库跑一下,用uv pip install。
⚠️ 注意: 如果你已经在一个由
uv管理的项目中(即存在pyproject.toml),建议不要混用uv pip install。因为下次你运行uv lock或uv sync时,uv可能会因为配置文件里没写这个包而把它从环境中移除。