欢迎光临
我们一直在努力

再见 Pip/Conda,你好 uv:Python 开发的“光速”革命

摘要:还在为 Python 的环境管理头秃?还在 pip、poetry、conda 之间反复横跳?是时候看看 uv 了。这个由 Rust 编写的“瑞士军刀”,正在以 100 倍的速度重塑 Python 开发体验。


做 Python 开发最痛苦的是什么?往往不是写代码,而是配置环境。

Web 开发者习惯用 venv + pip,数据科学家离不开 Conda,而追求规范的项目组则在大力推行 poetry。工具有很多,但即使是目前最流行的工具,也面临着慢(Conda 的 Solving environment…)、繁琐(手动管理 venv)和依赖冲突等顽疾。

就在我们习以为常时,uv 横空出世了。

作为一名从 Java 转战 Python 的开发者,我一直在寻找类似 Maven/Gradle 那种“又快又稳”的统一解决方案。在使用 uv 一周后,我毫不犹豫地卸载了其他工具。

今天就来聊聊,为什么 uv 是 2026 年 Python 开发者的首选。

⚡ 什么是 uv?为什么它这么快?

uv 是由 Astral 团队(也就是超快 Linter 工具 Ruff 的开发者)开发的。它的核心卖点非常简单粗暴:

  • Rust 编写:利用 Rust 的内存安全和极致性能,它的依赖解析速度比 pip-tools 快 10-100 倍。

  • All-in-One:它不是单纯的 pip 替代品,它是 Cargo (Rust) / Maven (Java) / npm (Node) 级别的全能项目管理器。

    • 它能安装 Python (替代 pyenv)

    • 它能管理依赖 (替代 pip/poetry)

    • 它能运行脚本 (替代 venv activation)

    • 它能管理全局工具 (替代 pipx)

  • 💻 全平台安装指南

    不管你是 Windows 死忠粉,还是 Linux 服务器管理员,安装 uv 都只需要一行命令。

     Windows 用户 (PowerShell)

    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

    🐧 Linux / macOS / WSL 用户

    对于 Linux 服务器、WSL 子系统或 macOS,使用以下命令:

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

    提示:安装完成后,uv 会自动更新你的 Shell 配置文件。如果没有生效,请运行 source ~/.bashrc 或重启终端。


    🥊 巅峰对决:uv vs. Conda

    对于很多数据科学和 AI 开发者来说,Conda 是绕不开的大山。那么 uv 能取代 Conda 吗?

    1. 速度差异:降维打击

    • Conda:你一定经历过 Solving environment… 转圈转了十几分钟最后报错的绝望。Conda 的解析器使用的是 SAT Solver,随着包数量增加,计算量呈指数级上升。

    • uv:采用 PubGrub 算法(Dart 语言的解析器算法)并用 Rust 实现。即使是安装 PyTorch 这样的大型库,uv 的解析也是毫秒级的。

    2. 定位差异

    • Conda:它是语言无关的包管理器。它不仅管 Python,还管 CUDA、C++ 库、ffmpeg 等二进制依赖。

    • uv:它是Python 专属的工具。它专注于 PyPI 生态。

    3. 该怎么选?

    • ** ✅ 必须转用 uv 的场景**:如果你主要做 Web 开发、后端服务、自动化脚本,或者你的依赖都能在 PyPI 上找到(现在的 Wheels 包已经非常完善,包括大多数 AI 库),uv 是绝对的碾压优势。

    • ** ⚖️ 保留 Conda 的场景**:如果你的工作环境极度依赖非 Python 的底层库(例如极老版本的系统需要特定的科学计算库),Conda 目前仍有优势。

    • ** 🚀 最佳实践**:"Conda 为辅,uv 为主"。你可以创建一个空的 Conda 环境来获得 Python 和基础系统库,然后在里面使用 uv 来管理所有 Python 包的安装。你会发现速度提升了不止一个量级。


    🚀 核心功能实战

    1. Python 版本管理:忘掉官网下载器

    以前我们要去 Python 官网下载 .exe 安装,现在:

    # 安装 Python 3.12
    uv python install 3.12

    # 寻找并列出所有可用版本
    uv python list

    uv 会自动下载解压,完全不污染你的系统注册表,这对 Linux 服务器上的多版本管理尤为方便。

    2. 项目初始化:像 Maven 一样规范

    开始一个新项目,不再是手动创建文件夹:

    # 初始化项目
    uv init my-awesome-project
    cd my-awesome-project

    # 添加依赖 (自动创建虚拟环境 + 写入 pyproject.toml + 生成 uv.lock)
    uv add requests pandas

    这不仅安装了包,还生成了 uv.lock 文件。这意味着你的队友 pull 下代码后,执行 uv sync,就能获得和你比特级一致的运行环境。

    3. 已有项目的“项目初始化”怎么做?

    如果你手头已经有一个写了一半的项目,或者从 GitHub 克隆了一个老项目,你可以通过以下步骤让它无缝接入 uv:

    情况 A:项目里什么配置文件都没有(只有 .py 代码) 直接在项目根目录运行:

    uv init

    • 发生了什么:uv 会发现这里已经有代码了,所以它不会覆盖你的代码,而是仅仅在当前目录生成一个 pyproject.toml(项目配置文件)和一个 .python-version(如果指定了版本)。接着你就可以用 uv add <库名> 把需要的依赖一个个加进去了。

    情况 B:项目里有一个老旧的 requirements.txt 你想把这个旧项目迁移到现代的 uv 工作流:

    # 1. 在当前目录初始化 pyproject.toml
    uv init

    # 2. 批量将 requirements.txt 里的依赖读取并写入到 pyproject.toml 中
    uv add -r requirements.txt

    • 发生了什么:uv 会自动解析你旧的 requirements.txt,把它们转换成现代的标准格式写进 pyproject.toml,同时为你创建虚拟环境并极速下载所有包。

    情况 C:项目里已经有 pyproject.toml(比如其他现代工具创建的) 直接运行:

    uv sync

    • 发生了什么:uv 会读取现有的配置,直接为你建立 .venv 虚拟环境,并把环境调整到与配置完全一致的状态。

    4. 零感知的虚拟环境

    你是否厌倦了每次打开终端都要 .venv\\Scripts\\activate 或者 source .venv/bin/activate? 使用 uv,你只需要在命令前加一个 run:

    # 自动使用当前项目的虚拟环境运行脚本
    uv run main.py

    它会自动检测环境,如果环境坏了,它甚至会在运行前自动修复它。

    💡 进阶:击中痛点的设计

    💾 磁盘空间的救星

    对于需要在多个项目中使用同一依赖(如 torch 或 pandas)的开发者,uv 采用了全局缓存 + 硬链接 (Hard Link) 的机制。

    • Maven/Conda 模式:10 个项目用了 pandas,硬盘往往就存了多份冗余。

    • uv 模式:硬盘只存 1 份 pandas,所有项目通过硬链接指向它。 结果:安装速度是毫秒级的,磁盘占用几乎不增长。

    🛠 脚本化与工具化

    有些工具我们只想临时用一下(比如 black 格式化代码),不想安装到项目里:

    # 下载、运行、然后清理,不留痕迹
    uvx black .

    uvx black . 是什么东西?

    要理解这个命令,我们需要把它拆开来看:

    • black:这是 Python 社区最著名的代码格式化工具。它的作用是自动把你的代码排版得整整齐齐(类似于 IDEA 里的 Ctrl+Alt+L)。

    • .:代表当前目录,意思是格式化当前目录下的所有 Python 文件。

    • uvx:这是 uv tool run 的简写。它是 uv 提供的一个极其强大的功能(灵感来自 Node.js 的 npx)。

    传统的痛点:以前你想用 black 格式化代码,你得先把它 pip install 安装到你的项目里,但这会污染你的项目依赖(毕竟格式化工具不是项目运行必须的库)。 uvx 的魔法:uvx black . 的意思是:“在后台悄悄拉取 black 这个工具,在一个临时的、隔离的沙箱环境里运行它,格式化我的代码,运行完毕后立刻把沙箱销毁,不要留下任何痕迹。”

    这样,你随时随地都能调用各种强大的 Python CLI 工具(比如爬虫工具、代码检查工具),而完全不需要在本地安装它们。

    📝 写给 Java/C++ 背景开发者的类比

    如果你熟悉其他语言的生态,可以这样理解 uv 的定位:

    Python 传统工具栈 uv 的角色 Java 对标 Node.js 对标
    pyenv / Conda uv python SDKMAN! / JDK Installer nvm
    pip uv pip 此时还没生成 pom.xml npm install (no save)
    venv / Conda Env (内置自动管理) JVM Classpath node_modules
    poetry / pip-tools uv add / lock Maven / Gradle npm / yarn
    pipx uv tool npm install -g

    🧰 核心 uv 命令清单 (Cheat Sheet)

    这里按照日常开发流程,为你整理了最常用的命令:

    🟢 1. 全局 Python 版本管理

    命令 作用
    uv python list 查看系统已安装和可供下载的 Python 版本
    uv python install 3.12 下载并安装指定的 Python 版本
    uv python pin 3.11 将当前项目锁定使用 3.11 版本(会生成 .python-version 文件)

    🔵 2. 项目与依赖管理 (现代标准工作流)

    命令 作用
    uv init 在当前目录初始化一个新项目(生成 pyproject.toml)
    uv add pandas 为项目添加一个依赖(会自动更新配置并安装)
    uv add pytest –dev 添加一个仅在开发环境下需要的依赖
    uv remove pandas 从项目中移除一个依赖
    uv sync 同步环境(根据配置文件,自动创建/更新 .venv,确保环境一致)
    uv lock 手动更新 uv.lock 锁定文件(解析最新版本但不立即安装)

    🟡 3. 代码与工具运行

    命令 作用
    uv run main.py 自动激活当前项目的虚拟环境,并运行 main.py
    uv run flask run 自动激活虚拟环境,并运行已安装的框架命令
    uvx <tool> 在临时隔离环境中运行某个全局工具(不污染当前项目)
    uv tool install <tool> 将工具安装为全局可用的命令行命令(类似 pipx)

    🟠 4. 兼容老旧的 Pip 习惯 (如果你依然想手动管理)

    注意:这些命令主要用于没有 pyproject.toml 的临时脚本环境。

    命令 作用
    uv venv 在当前目录手动创建一个 .venv 虚拟环境
    uv pip install requests 极速安装包到当前的虚拟环境中(不写入配置文件)
    uv pip install -r req.txt 极速批量安装旧配置文件里的包

    🔴 5. 缓存与清理

    命令 作用
    uv cache clean 清空全部缓存,释放磁盘空间
    uv cache prune 清理那些已经不被任何项目引用的老旧无用包

    🏁 总结

    Python 的打包生态曾经是一团乱麻,但 uv 的出现就像是一把奥卡姆剃刀,砍掉了所有不必要的复杂性。

    它快得惊人,稳得可怕。如果你的团队还在为 requirements.txt 的版本冲突扯皮,或者因为 conda install 卡在 Solving 环境而摸鱼,请立刻把这篇文章转发给他们。

    拥抱 uv,让 Python 回归简单。


    参考链接:Astral/uv GitHub

    赞(0)
    未经允许不得转载:171主机测评 » 再见 Pip/Conda,你好 uv:Python 开发的“光速”革命
    分享到: 更多 (0)

    评论 抢沙发

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