2 篇文章带有标签 “uv”

彻底搞懂 uv pip、uv add 和 uv tool 的核心区别

在 Python 工具链大洗牌的今天,Astral 团队推出的 uv 已经成为了无可争议的“速度之王”。它不仅能用 Rust 带来百倍的速度提升,还展现出了统一 Python 生态的野心。

然而,很多刚从 pippoetry 迁移过来的开发者,在看到 uv pipuv adduv tool 这三个都在“装包”的命令时,难免会产生疑问:它们难道不是重合的吗?为什么装个包还要分三种命令?

我们就来彻底拆解这三者的设计哲学和应用场景,帮你建立起最清晰的 uv 工作流。

其实,这是 uv 为了彻底解决 Python 长期以来“全局环境污染”“虚拟环境混乱”以及“工具与项目依赖混淆”等痛点,而设计的三套完全独立的工作流。

命令 对应传统工具 管理的目标对象 核心作用
uv pip pip / pip-tools 底层虚拟环境中的包 作为原生 pip 的超快替代品,直接向当前激活的环境中塞入依赖。
uv add poetry add / pdm add 当前声明式项目的依赖 现代项目管理工作流。自动管理 pyproject.tomluv.lock
uv tool pipx 全局可执行工具(如 ruff, black 在完全隔离的专用环境中安装 CLI 工具,并自动暴露到全局,绝不污染项目。

虽然它们都是给项目安装依赖,但一个是命令式(Imperative),一个是声明式(Dec

UV: An extremely fast Python package and project manager, written in Rust.

curl -LsSf https://astral.sh/uv/install.sh | sh
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
uv self update

创建/同步完整的开发环境

uv sync

执行该命令后,主要做了以下事:

  1. 读取项目配置 pyproject.toml
  2. 创建/激活虚拟环境 .venv
  3. 安装所有依赖(含开发依赖)
  4. 以可编辑模式(-e / editable)安装当前项目
  5. 生成/锁定依赖版本 uv.lock
uv add "mcp[cli]"
uv remove "mcp[cli]"
uv init echo
cd echo

创建的文件:

.
├── .python-version
├── README.md
├── main.py
└── pyproject.toml
uv run main.py
Hello from echo!