介绍
uv 是一个 极快的 Python 包管理器,兼容 pip / virtualenv / pyproject.toml,专注于:
• 🚀 极速安装依赖(比 pip 快几十倍)
• 📦 支持 requirements.txt 和 pyproject.toml
• 🧱 内置虚拟环境(不依赖 venv)
• 🔒 完整的依赖锁定机制(支持 uv pip compile)
• 💡 使用 Rust 编写,性能强悍
功能 | pip | uv |
---|---|---|
安装速度 | 慢 | 超快(基于 Rust) |
支持锁文件 | ❌ | ✅ uv pip compile |
创建虚拟环境 | 需手动 | ✅ 自动内置 |
多平台一致性 | 一般 | ✅ 通过 .lock 保证 |
安装缓存优化 | 一般 | ✅ 强缓存系统 |
使用方法
安装说明
# 安装 uv
curl -Ls https://astral.sh/uv/install.sh | bash
按照环境位置
vim ~/.zshrc
export PATH="$HOME/.local/bin:$PATH"
source ~/.zshrc
which uv # 应该返回 /opt/homebrew/bin/uv 或 ~/.local/bin/uv
uv --version
# 安装依赖(自动创建虚拟环境)
uv pip install -r requirements.txt# 添加依赖
uv pip install requests# 升级依赖
uv pip install --upgrade requests# 卸载依赖
uv pip uninstall requests# 生成锁文件
uv pip compile requirements.in > requirements.lock.txt
如下所示:
(.venv) ➜ ai_tools_show git:(main) uv --version
uv 0.6.9 (3d9460278 2025-03-20)
(.venv) ➜ ai_tools_show git:(main) uv venv
Using CPython 3.12.4 interpreter at: /Users/jacinlee/miniconda3/bin/python
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
(.venv) ➜ ai_tools_show git:(main)
uv 是通过 当前终端的 python 或 python3 路径 来决定使用哪个解释器的。也就是说它会执行:
which python
在你的终端当前环境中,这个指向的是 Anaconda 的 Python。
用 uv 创建或激活一个 Python 3.12 的虚拟环境,并让它成为这个项目的默认环境。下面是你的完整操作流程:
which -a python3.12
uv 会使用你指定的 Python 版本创建虚拟环境。命令如下:
uv venv --python=python3.12
或者显式:
uv venv --python=/usr/local/bin/python3.12
激活:
source .venv/bin/activate
如果一个项目已经有了requirements.txt了,那么在不破坏已有项目的情况下迁移到 uv + pyproject.toml,可以按下面步骤平滑过渡
uv init --python=3.12>>>>>输出
Initialized project `ai-tools-show`
然后生成了两个文件:分别是.python-version pyproject.toml文件了
uv pip install -r pyproject.tomluv pip install fastapi --add
自动写入 pyproject.toml 的 [project.dependencies] 区块或者:
# 第一步:安装
uv add -r requirements.txtuv add fastapi# 第二步:同步写入 pyproject.toml
uv pip freeze --add
命令 | 作用 |
---|---|
uv pip install -r requirements.txt | 只安装依赖,不写入 pyproject.toml |
uv add fastapi | 安装并写入 pyproject.toml |
uv add -r requirements.txt | 从 requirements.txt 添加所有依赖到 pyproject.toml |
uv pip freeze | 查看当前环境依赖(不写入文件) |
解释器共享,但 依赖隔离
这和 Java 的 Maven、Node.js 的 npm/yarn 是一样的逻辑:
• 全局只安装一次 Java / Node 解释器
• 每个项目单独维护自己的 pom.xml 或 package.json,从而下载独立依赖
Python 生态 默认推荐的是 venv/virtualenv,也就是每个项目一个 Python + 依赖。
不过你可以选择 只共享 Python 解释器,依赖用 .venv 隔离:
# 使用系统安装的 Python3.12,但不复制它,仅链接用
uv venv --python=python3.12
引用系统安装的 Python,而不是复制它。这样多个项目可以共用 interpreter,只隔离依赖(site-packages)。
你可以通过这个命令验证解释器路径:
which python
# 或者
python -c "import sys; print(sys.executable)"
方案 | 是否共享解释器 | 是否隔离依赖 | 说明 |
---|---|---|---|
uv venv --python=python3.12 | ✅ 是(可指定) | ✅ 是 | 推荐 ✅ |
python3.12 -m venv .venv | ✅ 是 | ✅ 是 | 标准 Python 工具 |
不用 venv,直接 pip install | ✅ 是 | ❌ 否 | 不推荐 ❌ |
Java/Maven | ✅ 是 | ✅ 是(按 .m2/repo) | 类似 |
Node/npm | ✅ 是 | ✅ 是(按 node_modules) | 类似 |
工具 | 本质作用 | 谁开发的 | 管理的内容 |
---|---|---|---|
pip | Python 官方包管理工具 | Python 官方 | PyPI 上的纯 Python 包 |
conda | 科学计算生态的包管理工具 | Anaconda Inc. | Python + C依赖等混合包 |
uv | 新一代超快包管理工具 | Astral.sh | PyPI 包(兼容 pip) |
对比项 | uv | pip | conda |
---|---|---|---|
📦 包源 | PyPI | PyPI | Conda Forge / 默认 channel |
🏃♂️ 安装速度 | 🚀 极快(Rust 实现) | 中等 | 较慢(依赖解算开销大) |
🧠 依赖解决能力 | ✅ 强(支持锁定) | ❌ 差(依赖冲突常见) | ✅ 强(可以混合 C 依赖) |
🐍 虚拟环境管理 | ✅ 内置 uv venv | ❌ 无(需配合 venv 使用) | ✅ 内置 conda env |
🔐 锁文件支持 | ✅ uv.lock | ❌ 无原生锁(需用 pip-tools) | ✅ environment.yml + reproducible |
📁 依赖隔离 | ✅ 每项目 .venv | ❌ 手动做(无自动隔离) | ✅ 自动(但体积大) |
🧩 原生支持 C 库 | ❌ 仅纯 Python | ❌ 需编译器 / wheels | ✅ 非常擅长(如 NumPy, pandas) |
💡 初学友好 | ✅ 简洁 | ✅ 简洁 | ❌ 学习曲线陡(路径管理复杂) |
🔥 推荐场景 | 🚀 Web/AI 项目,现代工程流 | 📦 通用 Python 包管理 | 🔬 科研环境(需 C/Fortran 库) |
FastAPI、Web 开发 | uv | 快速、干净、现代依赖锁定,适配 venv,构建速度远超 pip |
---|---|---|
通用 Python 包管理 | pip | 够用,兼容性强,但需手动解决依赖冲突 |
科研、数值计算(如pandas) | conda | 内置 C/FORTRAN 包,安装 NumPy、SciPy 更稳定 |
多项目/CI/CD 构建 | uv + rye | 支持锁文件、项目隔离、解释器管理,部署方便 |
依赖冲突
什么是“依赖冲突”?怎么发生的?
pip install A B
• A 依赖 requests==2.26
• B 依赖 requests>=2.28
这就冲突了 —— 你装不了两个版本的 requests,系统无法决定到底该装哪一个。
传统 pip 在这时会直接报错或装错版本,而 uv / poetry 等现代工具就能更智能地解决。
⛓️ 求解图算法优化 | 更快找到符合所有 constraints 的版本组合 | |
---|---|---|
📦 全图解析 | 不止解析你显式安装的库,还会分析它们的子依赖 | |
✅ 严格锁定 | 避免每次安装版本漂移(版本浮动)的 | |
pip | uv(或 poetry 等) |
---|---|
逐步解析安装 | 全部构建依赖树后一起解析 |
安装中才发现冲突 | 安装前就先解依赖,确认无误 |
无法锁定版本 | 会生成精确版本锁文件 uv.lock |
• ❌ pip 会冲突失败(或安装错版本)
• ✅ uv 会告诉你版本冲突,并给出冲突路径:
❗ Conflict: some-lib requires requests>=2.28, but you have requests==2.26.