UV-Python包高效管理工具

介绍

uv 是一个 极快的 Python 包管理器,兼容 pip / virtualenv / pyproject.toml,专注于:

• 🚀 极速安装依赖(比 pip 快几十倍)

• 📦 支持 requirements.txt 和 pyproject.toml

• 🧱 内置虚拟环境(不依赖 venv)

• 🔒 完整的依赖锁定机制(支持 uv pip compile)

• 💡 使用 Rust 编写,性能强悍

功能 pip uv
安装速度 超快(基于 Rust)
支持锁文件 ✅ uv pip compile
创建虚拟环境 需手动 ✅ 自动内置
多平台一致性 一般 ✅ 通过 .lock 保证
安装缓存优化 一般 ✅ 强缓存系统

使用方法

安装说明

python 复制代码
# 安装 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

如下所示:

python 复制代码
(.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 的虚拟环境,并让它成为这个项目的默认环境。下面是你的完整操作流程:

python 复制代码
which -a python3.12

uv 会使用你指定的 Python 版本创建虚拟环境。命令如下:

python 复制代码
uv venv --python=python3.12

或者显式:

python 复制代码
uv venv --python=/usr/local/bin/python3.12

激活:

python 复制代码
source .venv/bin/activate

如果一个项目已经有了requirements.txt了,那么在不破坏已有项目的情况下迁移到 uv + pyproject.toml,可以按下面步骤平滑过渡

python 复制代码
uv init --python=3.12

>>>>>输出
Initialized project `ai-tools-show`

然后生成了两个文件:分别是.python-version pyproject.toml文件了

python 复制代码
uv pip install -r pyproject.toml

uv pip install fastapi --add 
自动写入 pyproject.toml 的 [project.dependencies] 区块

或者:
# 第一步:安装
uv add -r requirements.txt

uv 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 隔离:

python 复制代码
# 使用系统安装的 Python3.12,但不复制它,仅链接用
uv venv --python=python3.12

引用系统安装的 Python,而不是复制它。这样多个项目可以共用 interpreter,只隔离依赖(site-packages)。

你可以通过这个命令验证解释器路径:

python 复制代码
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 支持锁文件、项目隔离、解释器管理,部署方便

依赖冲突

什么是"依赖冲突"?怎么发生的?

python 复制代码
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.

相关推荐
mqwguardain4 小时前
python常见反爬思路详解
开发语言·python
_庄@雅@丽4 小时前
(UI自动化测试web端)第二篇:元素定位的方法_xpath扩展(工作当中用的比较多)
python·ui自动化元素定位·xpath元素定位
伊织code5 小时前
uv - 配置 [官方文档翻译]
pip·配置·环境变量·索引·uv·configure·.env
测试笔记(自看)5 小时前
Python+Requests+Pytest+YAML+Allure接口自动化框架
python·自动化·pytest·allure
越甲八千5 小时前
python 中match...case 和 C switch case区别
c语言·python·xcode
只对py感兴趣的小蒟蒻6 小时前
L2-052 吉利矩阵
python
豆芽8196 小时前
深度学习核心算法
人工智能·python·深度学习·神经网络·机器学习·计算机视觉·卷积神经网络
Leo来编程6 小时前
Python学习第二十三天
python·学习
换个网名有点难6 小时前
DJANGO 中间件的白名单配置
python·django