2 篇文章带有标签 “virtual-environment”

彻底搞懂 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 工具,并自动暴露到全局,绝不污染项目。

🔍 深度对比:为什么它们不能互相替代?

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

安装

On macOS and Linux

curl -LsSf https://astral.sh/uv/install.sh | sh

On Windows

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]"

Python 项目

创建

uv init echo
cd echo

创建的文件:

.
├── .python-version
├── README.md
├── main.py
└── pyproject.toml

运行

uv run main.py
Hello from echo!

参考资料