关于uv 工具的使用总结(uv,conda,pip什么关系)
最近要开发MCP 项目,uv工具使用是官方推荐的方式,逐要了解这个uv工具。整体理解如下:
一.uv工具的基本情况
UV 是一个由 Rust 编写的现代化 Python 包管理工具,旨在通过极速性能和一体化功能替代传统工具(如 pip、virtualenv、pip-tools 等),覆盖依赖管理、虚拟环境创建、项目配置、依赖锁定等全流程操作。其核心优势在于速度极快(比 pip 快 10-100 倍)、兼容现有生态(支持 requirements.txt
和 pyproject.toml
),且提供一站式解决方案(无需多工具切换)。
二、uv 与conda 什么关系
uv类似pip 和virtualenv等工具的集合
1.uv创建虚拟环境下,与conda的区别UV 不会自动安装 Python 解释器
UV 的 uv venv
命令在创建虚拟环境时,会生成.venv的文件,依赖于系统中已安装的 Python 解释器。它的行为类似于 Python 自带的 venv
模块:
-
若当前已激活某个 Python 环境(如通过 Conda 或
pyenv
安装的 Python),UV 会基于该环境的解释器创建虚拟环境。 -
若未激活任何环境,UV 默认使用系统的全局 Python 解释器。
-
可以指定已经存在的python解释器:如何指定 Python 版本?若需使用特定版本的 Python,需 提前通过其他工具安装该版本(如
pyenv
、Conda 或系统包管理器),再通过--python
参数指定路径:如 uv venv .venv --python /bin/python
2.如果用conda创建虚拟环境下,也可以使用uv工具进行python包的管理,
在 Conda 环境中使用 UV
-
角色定位
-
✅ 正确:在 Conda 环境中,UV 可替代
pip
,提供更快的包安装和依赖解析,但 不会创建新的虚拟环境(如.venv
)。 -
⚠️ 关键补充:必须通过
conda activate
显式激活目标环境,否则uv run
可能误判环境(如切换到项目中的.venv
)。
-
-
依赖管理分工
-
✅ 正确:Conda 负责管理 Python 解释器版本、非 Python 依赖(如 CUDA、系统库)。
-
✅ 正确:UV 负责管理 纯 Python 包(如
numpy
、requests
),且依赖关系可写入pyproject.toml
或requirements.txt
。
-
三、uv add 和uv pip install的区别
uv add
和 uv pip install
是 UV 工具中两个关键命令,它们虽然都能安装 Python 包,但设计目标和适用场景有显著区别。以下是详细对比:
功能定位对比
命令 | 核心功能 | 适用场景 |
---|---|---|
uv add | 将依赖声明写入 pyproject.toml 并安装包,支持分组(生产/开发依赖)。 | 项目管理:需要记录依赖到配置文件。 |
uv pip install | 直接安装包到当前环境,行为与 pip install 一致,但速度更快。不修改任何配置文件。 | 临时操作:快速安装或调试,无需持久化依赖。 |
这个pyproject.toml 文件是记录相关依赖库信息的文件,有点类似pip下的requirements.txt,
利用这个文件,可以进行项目管理
安装生产依赖:
uv install --only main
-
安装所有依赖(包括开发依赖):
uv install
四、uvx是什么工具命令
临时运行工具:uvx
会在隔离的虚拟环境中临时安装并运行指定的工具,执行完毕后该环境会被清理。
-
快速试用工具:适用于快速试用某个工具或运行一次性的任务,而无需在系统中永久安装该工具。
-
支持版本指定:可以指定工具的版本,例如:Astral Docs+1Astral Docs+1