欢迎光临
我们一直在努力

pip 已经老了!2026 年最值得尝试的 Python 包管理工具——UV 完全指南

文章摘要

还在为 pip install 的龟速抓狂吗?还在 conda 和 virtualenv 之间反复横跳吗?

本文带你深入了解 UV —— 这款由 Astral 团队(Ruff 作者)打造的下一代 Python 包管理工具。基于 Rust 编写的它,依赖解析速度比 pip 快 10-100 倍,创建虚拟环境仅需 10ms。

从安装配置到镜像源优化,从项目初始化到日常开发,一文讲透 UV 的核心用法和实战技巧。读完这篇文章,你将彻底告别 Python 包管理的痛苦,享受丝滑般的开发体验。


三、开头

那个让我怀疑人生的下午

上周三下午三点,新来的实习生小王跑过来找我:

“哥,我环境配了一上午了,pip 一直卡在下载依赖那里……”

我走过去一看,好家伙:

  • 终端里 pip install numpy pandas scikit-learn 已经跑了 8 分钟
  • 进度条卡在 47% 一动不动
  • 小王的表情已经从期待变成了绝望 😅

我当时就笑了——这场景太熟悉了。

想当年我也是这么过来的:

$ pip install -r requirements.txt
# 等待中… 1分钟… 3分钟… 5分钟…
# Collecting tensorflow (2.4GB)
# 还要等 15 分钟… ❌

Python 的包管理,简直就是开发者的噩梦。

  • pip 慢得像蜗牛爬
  • conda 重得像头大象
  • virtualenv 还要搭配一堆工具才能用

直到我遇到了 UV。

第一次用它的时候,我以为终端坏了——

因为太快了,快到我还没反应过来,就已经装完了。

今天这篇文章,我就把 UV 从入门到上手的完整经验分享给你。

看完就能用,用完就回不去。


四、问题背景

为什么我们被包管理折磨了这么多年?

先说说 pip 的"罪状"

pip 是 Python 的官方包管理器,就像是一个老实但效率低下的老员工。

它的优点:

  • ✅ 简单易学
  • ✅ 官方支持
  • ✅ 生态完善

但缺点也很明显:

❌ 罪状一:慢到让人怀疑人生

# 安装一个常见的数据科学栈
pip install numpy pandas scikit-learn
# 等待时间:约 45 秒 ~ 2 分钟(取决于网络)

我在项目里遇到过这样的场景:

本地 pip freeze > requirements.txt,部署到服务器一跑:

ERROR: Package 'xxx' requires a different Python: ">=3.9" but you have "3.8"

当场崩溃。

原因?requirements.txt 没有精确锁定依赖版本,导致不同机器安装结果不一致。

❌ 罪状二:依赖解析是串行的

想象一下你去超市买东西:

  • pip 的方式:一个一个商品去收银台排队结账
  • UV 的方式:所有商品一起扫码,一次性结账

这就是为什么大型项目的依赖解析能跑到你怀疑人生。

再看看 conda 的"双面性"

conda 就像是全能但臃肿的瑞士军刀。

优点:

  • ✅ 支持非 Python 依赖(CUDA、MKL 等)
  • ✅ 环境隔离做得好
  • ✅ 科学计算生态完善

缺点:

  • ❌ 安装体积大(Miniconda 就几百 MB)
  • ❌ 依赖解析逻辑复杂,容易卡住
  • ❌ 启动慢,每次激活都要等

最痛苦的:工具链割裂

传统方案需要组合 5 个工具:

功能需要的工具
包安装 pip
虚拟环境 virtualenv / venv
依赖锁定 pip-tools
版本管理 pyenv
全局工具 pipx

5 个工具,5 套命令,5 种配置方式。

新手看完直接劝退,老手也经常记混命令。

我曾经因为忘记激活虚拟环境,把包装到了系统 Python 里,

然后花了两个小时才清理干净…… 😭


UV 是什么?

用一句话解释

UV = pip + virtualenv + pip-tools + pyenv + pipx

一个工具,替代整个 Python 工具链。

谁做的?

Astral 团队——你可能没听过这个名字,但你一定用过他们的另一个产品:

Ruff(那个比 Flake8 快几十倍的 Python linter)

这群人专门做让 Python 开发更快的工具。

核心特性(人话版)

特性说人话
⚡ 极致性能 Rust 写的,比 pip 快 10-100 倍
🎯 统一管理 不用再装一堆工具了
🔒 依赖锁定 保证你和同事的环境一模一样
🚀 零配置启动 不用手动激活虚拟环境
📦 全局缓存 装过的包不用再下载
🛠️ 兼容性好 支持 PyPI、requirements.txt、pyproject.toml

性能实测(官方数据)

操作pipuv提升倍数
安装 numpy+pandas+scikit-learn ~45s ~8s 5-6x
创建虚拟环境 ~800ms ~10ms 80x
依赖解析(大型项目) 数分钟 数秒 10-100x

看到这些数据,我当时就惊了:

这不是升级,这是降维打击。


五、实战指南:从零上手 UV

5.1 安装 UV(3 种方式任选)

方式一:pip 安装(最简单)

pip install uv

✅ 适合:已经在用 Python,不想折腾的人 ⚠️ 注意:建议在虚拟环境中安装

方式二:官方脚本(推荐 ⭐)

Windows (PowerShell):

irm https://astral.sh/uv/install.ps1 | iex

macOS / Linux:

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

✅ 优点:获取最新版本,独立于 Python 环境

方式三:Homebrew(macOS/Linux 用户)

brew install uv

验证安装

uv –version
# 输出示例:uv 0.4.27

看到版本号?恭喜你,已经成功一半了!🎉


5.2 配置国内镜像源(⚡ 必做!)

为什么必须换镜像源?

不换的话:

$ uv add requests
# 等待中… 30秒… 60秒…
# Connection timeout ❌
# 或者速度只有几 KB/s(比我奶奶的网还慢)

换完之后:

$ uv add requests
# ✅ 0.8s 完成(快到飞起)

这差距,谁用谁知道。

配置方法(二选一)

✅ 推荐方案:系统级配置(一次配置,永久生效)

Windows (PowerShell):

[System.Environment]::SetEnvironmentVariable("UV_DEFAULT_INDEX", "https://pypi.tuna.tsinghua.edu.cn/simple", "User")

macOS / Linux:

echo 'export UV_DEFAULT_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple' >> ~/.zshrc && source ~/.zshrc

备选方案:项目级配置

在项目根目录创建 uv.toml:

[tool.uv]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"

⚠️ 缺点:每个项目都要配一遍,麻烦

国内镜像源推荐

来源地址推荐指数
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple ⭐⭐⭐⭐⭐ (稳定)
阿里云 https://mirrors.aliyun.com/pypi/simple/ ⭐⭐⭐⭐ (速度快)
腾讯云 https://mirrors.cloud.tencent.com/pypi/simple/ ⭐⭐⭐⭐ (南方友好)
中科大 https://pypi.mirrors.ustc.edu.cn/simple/ ⭐⭐⭐⭐ (教育网)

个人推荐清华源,用了半年没出过问题。


5.3 创建你的第一个 UV 项目(手把手教程)

第一步:初始化项目

# 创建项目目录
mkdir my-project && cd my-project

# 初始化(自动生成配置文件)
uv init

执行后会生成:

my-project/
├── .python-version # Python 版本声明
├── pyproject.toml # 项目配置文件(核心!)
└── uv.lock # 依赖锁文件(首次 sync 后生成)

这些文件都是干嘛的?

  • .python-version:告诉 UV 用哪个 Python 版本
  • pyproject.toml:项目的"身份证",记录所有依赖和配置
  • uv.lock:环境的"快照",保证大家的环境一模一样

第二步:查看生成的配置

[project]
name = "my-project"
version = "0.1.0"
description = "Add a short description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = []

这就是现代 Python 项目的标准格式,比 requirements.txt 规范多了。

第三步:添加依赖

# 添加生产依赖(比如 Web 框架)
uv add fastapi

# 一次添加多个
uv add requests pandas

# 添加开发依赖(测试、代码格式化工具)
uv add –dev pytest
uv add –dev black ruff

添加后,pyproject.toml 会自动更新:

[project]
dependencies = [
"fastapi>=0.115.0",
"requests>=2.32.3",
"pandas>=2.2.3",
]

[dependency-groups]
dev = [
"pytest>=8.3.4",
"black>=24.10.0",
"ruff>=0.8.0",
]

注意看,版本号自动锁定了!

这就是 UV 的智能之处——它帮你选了最合适的版本,避免了版本冲突。

第四步:同步环境

uv sync

这条命令会:

  • 自动创建 .venv 虚拟环境(如果不存在)
  • 根据 pyproject.toml 和 uv.lock 安装所有依赖
  • 保证环境完全可重现
  • 再也不用手动这三步了:

    • ❌ python -m venv .venv
    • ❌ source .venv/bin/activate
    • ❌ pip install -r requirements.txt

    现在一条命令搞定一切。

    第五步:运行项目

    # 直接运行脚本(自动使用 .venv 环境)
    uv run main.py

    # 运行单个命令
    uv run python –version

    # 运行测试
    uv run pytest

    重点来了:不需要手动激活虚拟环境!

    UV 会自动识别 .venv,直接在其中运行命令。

    这对新手来说太友好了——再也不用纠结"我到底激活了没有"这个问题。

    我曾经因为忘了激活环境,

    把 pytest 装到了系统 Python 里,

    然后其他项目全报错…… 😭

    有了 UV,这种蠢事再也不会发生了。


    5.4 常用命令速查表(建议收藏)

    操作命令说明
    初始化项目 uv init 生成 pyproject.toml
    添加依赖 uv add <pkg> 自动更新配置
    移除依赖 uv remove <pkg> 清理依赖和锁文件
    同步环境 uv sync 创建/更新虚拟环境
    运行脚本 uv run script.py 自动识别 .venv
    创建虚拟环境 uv venv 单独创建环境
    查看版本 uv –version 检查安装状态
    更新 UV uv self update 升级到最新版

    5.5 进阶技巧(用了就回不去)

    1️⃣ 管理 Python 版本

    # 安装指定版本的 Python
    uv python install 3.11
    uv python install 3.12

    # 查看已安装的版本
    uv python list

    # 使用特定版本创建环境
    uv venv –python 3.11

    UV 内置了类似 pyenv 的功能,不需要额外安装版本管理工具。

    以前我要装 Python 3.11 要折腾半天,

    现在 uv python install 3.11 一条命令搞定。

    真香。⚡

    2️⃣ 运行一次性脚本(临时任务神器)

    有时候你要写个临时脚本处理数据,不想创建整个项目:

    # /// script
    # requires-python = ">=3.11"
    # dependencies = [
    # "requests>=2.32.0",
    # ]
    # ///
    import requests

    response = requests.get("https://httpbin.org/get")
    print(response.json())

    运行时 UV 会自动安装所需依赖:

    uv run script.py

    非常适合临时脚本和数据清洗任务。

    3️⃣ 使用全局工具(替代 pipx)

    # 直接运行 CLI 工具,无需永久安装
    uvx black –check my_script.py
    uvx ruff check .
    uvx httpie https://example.com

    uvx 是 UV 的全局工具运行器,类似于 pipx,但更快更轻量。

    我以前用 pipx 装 black 要等好几秒,

    现在 uvx 黑一下就好了。

    这种体验差距,用过就懂。😄

    4️⃣ 从老项目迁移

    如果你有一个用 pip 管理的老项目:

    # 进入项目目录
    cd your-old-project

    # 从 requirements.txt 导入依赖
    uv init
    uv add -r requirements.txt
    # 或者直接转换
    uv pip compile requirements.txt -o pyproject.toml

    迁移成本极低,基本无痛切换。


    六、UV vs 传统工具对比

    核心能力对比

    能力pip + virtualenvcondaUV胜出者
    包安装速度 ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ UV
    依赖解析速度 ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ UV
    虚拟环境管理 ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ Conda
    Python 版本管理 ⭐⭐⭐⭐ ⭐⭐⭐⭐ 平手
    非 Python 依赖 ⭐⭐⭐⭐⭐ Conda
    锁文件支持 ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ UV
    学习曲线 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ pip
    工具统一性 ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ UV
    CI/CD 友好度 ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ UV

    选型建议(人话版)

    ✅ 选 UV 的场景(90% 的情况)

    • Web 开发(Django, FastAPI, Flask)
    • 自动化脚本和工具开发
    • CI/CD 流水线(追求极速构建)
    • 容器化部署(Docker 镜像构建)
    • 团队协作项目(需要环境一致性)
    • 个人学习和练手项目

    ✅ 选 Conda 的场景(特殊情况)

    • 数据科学和机器学习项目
    • 需要 CUDA/MKL 等非 Python 依赖
    • 科学计算密集型任务

    💡 我的建议

    90% 的 Python 开发场景,UV 都是最好的选择。

    只有涉及科学计算和非 Python 依赖时,才考虑 Conda。

    如果你不确定,先用 UV,遇到问题再换 Conda 也不迟。


    七、踩坑经验(血泪总结)

    在实际项目中使用 UV,我踩过不少坑,现在全部分享给你:

    坑 1:镜像源配置不生效

    症状:配置了镜像源,但下载还是很慢

    原因:环境变量没有重新加载

    解决:

    # Windows: 重启终端或 CMD
    # macOS/Linux:
    source ~/.zshrc # 或 source ~/.bashrc

    验证是否生效:

    echo $UV_DEFAULT_INDEX
    # 应该输出你设置的镜像地址

    我当时配完以为好了,结果还是慢,

    查了半天才发现是终端没重启……

    这种低级错误,踩过一次就够了。😅

    坑 2:权限问题(Windows 用户注意)

    症状:安装时报权限错误

    解决:

    # 以管理员身份运行 PowerShell
    # 或安装到用户目录
    irm https://astral.sh/uv/install.ps1 | iex

    坑 3:与现有 pip 环境冲突

    症状:uv add 之后,pip list 看不到包

    原因:UV 使用独立的 .venv 环境,不影响系统 Python

    解决:

    # 使用 UV 的命令操作环境
    uv pip list # 查看 UV 管理的包
    uv run python -m pip list # 在 .venv 中运行 pip

    这个坑我替你踩过了:

    以为 UV 和 pip 共享环境,

    结果两边装的包互相看不到,

    浪费了半小时排查…… 😤

    坑 4:锁文件冲突(多人协作必看)

    症状:多人协作时 uv.lock 经常冲突

    原因:不同人添加依赖的顺序不同

    解决:

    # 统一使用 uv sync 同步环境
    # 不要手动编辑 uv.lock
    git checkout uv.lock # 冲突时恢复
    uv sync # 重新生成

    我们团队刚开始用 UV 时,

    几乎每次合并代码都冲突,

    后来约定好只通过 uv sync 管理,

    世界清净了。🕊️


    八、最佳实践(经验之谈)

    基于我的实战经验,总结几点最佳实践:

    1️⃣ 始终将 uv.lock 加入版本控制

    # .gitignore 中不要忽略 uv.lock
    # 确保团队成员使用完全一致的依赖版本

    为什么?

    因为 uv.lock 锁定了所有依赖的精确版本,保证:

    你本地能跑的代码,同事拉下来也能跑。

    服务器上能跑的代码,生产环境也能跑。

    环境一致性,是团队协作的基石。

    2️⃣ 区分生产依赖和开发依赖

    uv add fastapi # 生产依赖
    uv add –dev pytest # 开发依赖

    这样部署时可以跳过测试相关的包,减小 Docker 镜像体积。

    我们有个项目光测试依赖就 200MB,

    分离后生产镜像小了一半。

    构建时间也从 3 分钟降到 1 分钟。⚡

    3️⃣ 善用 uv run(减少出错概率)

    # 推荐:使用 uv run
    uv run pytest

    # 不推荐:手动激活环境
    source .venv/bin/activate
    pytest

    特别是多环境切换时,uv run 能避免"忘激活"或"激活错环境"的尴尬。

    4️⃣ 定期更新 UV

    uv self update

    UV 迭代很快,新版本通常会:

    • 修复 bug
    • 提升性能
    • 支持新特性

    我每个月都会更新一次,

    每次都能感受到明显的速度提升。

    这种持续优化的感觉,真好。😄

    5️⃣ 团队统一工具链

    如果团队决定使用 UV,就全员切换,避免混用导致的环境混乱。

    我们团队当初是渐进式迁移的,

    结果一半人用 pip,一半人用 UV,

    依赖冲突炸了好几次……

    后来痛定思痛,全员切 UV,世界和平了。🕊️


    九、写在最后

    从 pip 到 UV,我的真实感受

    说实话,刚接触 UV 时我是怀疑的:

    又一个新工具?学习成本值不值?

    pip 虽然慢,但能用啊,为什么要换?

    但真正用了一周后,我的感受是:

    好的工具,能让开发者专注于业务本身,而不是和环境搏斗。

    以前配环境要折腾半天:

    # 旧方式(3 步)
    python -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
    # 然后等待… 等待… 等待…

    现在三条命令搞定:

    # 新方式(3 步,但快 10 倍)
    uv init
    uv add fastapi requests
    uv run main.py
    # 完成!✅

    省下来的时间,可以用来:

    • 写更多有价值的代码
    • 学习新技术
    • 或者……早点下班回家陪家人 😄

    最后的建议

    如果你还在被 Python 的包管理折磨,真心推荐试试 UV。

    一旦用过,就回不去了。

    不信?你现在就可以打开终端试一下:

    # 1. 安装 UV(30 秒)
    irm https://astral.sh/uv/install.ps1 | iex

    # 2. 创建项目(5 秒)
    mkdir test-uv && cd test-uv
    uv init

    # 3. 添加依赖(2 秒)
    uv add requests

    # 4. 运行脚本(1 秒)
    uv run python -c "import requests; print(requests.__version__)"

    # 总耗时:不到 1 分钟 ⚡

    感受一下这种丝滑的体验吧。


    学习资源

    • 官方文档:https://docs.astral.sh/uv/
    • 中文文档:https://uv.doczh.com/
    • GitHub 仓库:https://github.com/astral-sh/uv
    • 视频教程:B站搜索 UV 教程
    • 安装指南:https://uv.doczh.com/getting-started/installation/

    📖 推荐阅读

    • GPT-5.5 变强、Spring AI 更新、Ollama 爆漏洞|今天值得看的技术热点
    • 还在复制粘贴 if-else?模板方法模式,专治重复代码!
    • 更多技术干货
    • 更多实战经验分享

    📌 写文不易,Bug 更不易。

    如果这篇文章对你有帮助,可以搜一搜:空门技术栈

    这里分享:

    • ✅ Java / Spring AI / 企业级项目实战
    • ✅ Docker / RAG知识库 / 微服务踩坑
    • ✅ Python、前端、AI应用落地
    • ✅ 偶尔分享一些「头发保卫战」经验 😆

    一个热爱技术、持续填坑的开发者, 陪你一起少踩坑,少加班,多写优雅代码。

    赞(0)
    未经允许不得转载:171主机测评 » pip 已经老了!2026 年最值得尝试的 Python 包管理工具——UV 完全指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址