摘要:还在为 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

![pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260823004656-6a8a430045592-220x150.png)
![pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260823004339-6a8a423bd3e97-220x150.png)

