uv:终结 Python 虚拟环境管理乱局

摘要

倘使你仍于 -m venv .venv 以及 .venv/bin/ 再加上 pip -r .txt 此一流程当中不断来回折腾, 那就该瞧瞧 uv 了。uv 乃是 (Ruff、ty 的创作者)运用 Rust 编写而成的 包与项目管理工具, 它将版本管理、依赖安装、锁文件、虚拟环境以及项目管理这五件事情整合进一个单文件二进制里, 其安装速度为 pip 的 10 至 100 倍, 并且压根全然无需手动去激活环境。

uv 是什么

一句话进行概括, uv等于pyenv也就是版本管理这个工具, 加上pip那用于包的安装事宜能, 再加上pip - tools这个负责生成锁文件功能的东西, 加上venv虚拟环境, 再加上/pdm项目管理。

它并非是又一个所谓"更快的pip", 而是将生态里长期处于分裂状态的这几层工具, 统一到了一个工具链当中。

版本管理方面, uv 3.12 可直接下载对应版本的解释器, 无需再单独安装 pyenv。

· 虚拟环境方面, uv venv 可以使用, 就连手动创建都不用, uv run 能够自动检测, 还能创建项目的 .venv。

· 依赖的安装以及锁定方面: uv add 或者 uv sync 会去生成并且使用 uv.lock, 从而确保团队的各个成员以及 CI 所安装出来的依赖版本是完全一样的。

· 一键进行运行, uv run .py 会自动于项目虚拟环境之中执行, 整个过程并不需要。

核心优势:和其他虚拟环境工具比

生态当中, 用于管理虚拟环境以及依赖的工具数量不少, 它们各自所解决的问题并非完全相同。

| 工具 | 定位 | 需要手动 ?首先来看, 有个叫uv的, 它在版本管理方面是全能的, 涵盖了版本、包、环境以及项目, 它没有锁文件, uv run会自动进入环境, 是内置且能自动下载的, 它的锁文件是uv.lock, 运行速度极快;再看venv, 它是标准库, 只管环境隔离, 不过进入环境必须要手动操作, 它没有锁文件, 运行速度慢, 而且它还是venv的前身 或者说是增强版, 运行速度同样慢;然后是pip, 它只管装包, 依赖venv, 它的锁文件不是真的锁文件(.txt类), 运行速度慢, 有pip+整合版, 它没有以run形式存在的进入方式, 它的锁文件是.lock, 运行速度非但慢, 其解析器还出了名地卡顿;还有一种是关于项目和依赖管理方面的, 其没有以run进入的方式, 要配合pyenv来使用, 它的锁文件是.lock, 但其运行速度处于中等水平;接着是pdm, 它类似于前面提到的某种情况, 还支持PEP 582, 它没有以pdm run进入的方式, 部分情况有类似支持, 它的锁文件是pdm.lock, 运行速度较快;最后是conda/mamba, 它专注科学计算相关一大家子内容, 有带conda run的进入方式, 它的锁文件不是严格意义上的锁文件, conda运行速度慢, mamba运行速度快, 还有pyenv, 它只管版本, 不过不适用某种类似进入的方式且不存在锁文件那种情况, 运行速度方面没有相关衡量值标点。

几个容易误解的地方:

"不用"并非uv所独有: /pdm/的xxx run命令原本就具备在不激活的情况下直接运行命令的能耐, 其本质都是对子进程临时更改PATH。uv的优势在于将这种模式实现得最为迅速、最为零配置。

uv真正独特的地方是, 一个二进制能同时管理版本(无需配置pyenv), 存在全局内容寻址缓存, 多个项目可共用同款包的磁盘存储, 并不会重复占用空间, 它还能完全兼容pip接口, uv pip能够直接当作pip的替代品, 迁移成本几乎为零。

· conda在什么时候还应该被使用呢: 那就是当项目依赖并非普通的编译库(包括CUDA、MKL、某些R/Julia绑定)的时候, conda/mamba的二进制包管理此时依然是更为合适的选择------uv仅仅负责其自身生态, 而不会去处理系统级的二进制依赖。

对 AI 编程助手格外友好

这情形于AI Agent编程时期价值显著被扩放了, 若编写的脚本意要交予AI(诸如Code等)予以调用并执行, 采用uv run表明全然无需于给予AI的指令当中特意去交代"先激活虚拟环境过后再开展执行程序"这般操作。AI进行每次工具调用时常常是独立的shell进程, 环境激活状态原本就难以留存, 稍有疏忽就会因遗忘而报错;uv run xxx.py每次都会自动定位并采用项目自身的虚拟环境, AI只要记住这种命令格式便可以, 无需理会"环境是否已激活"这个状态方面的问题。这也就是为何当下几乎所有新建的项目都会直接以uv来启动------对人而言省心, 对AI来说会更加省心。

面向人群

对于那些已经厌烦了venv加上pip再加上.txt这样一套老旧流程, 渴望能够拥有更快且更省心体验的开发者。

· 已经在用 /pdm,但嫌解析器和安装速度不够快的团队

· 需要在 CI 里频繁重建虚拟环境、对安装速度敏感的项目

· 那些期望有一个工具能够一并处理版本切换以及依赖管理, 进而降低工具链复杂度的人 , 标点改为句号也可。

Code等人工智能领域里用于编写自动化脚本的编程助手, 那些不想每次都在其中向人工智能交代务必先激活环境的人。

快速上手

安装(macOS / Linux):

复制代码
curl -LsSf https://astral.sh/uv/install.sh | sh

用 :

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

也可以用已有的包管理器安装,比如 :

复制代码
brew install uv

或者通过 pipx:

复制代码
pipx install uv

安装指定版本的 (不用再单独装 pyenv):

复制代码
uv python install 3.12

新建一个项目:

复制代码
uv init myproject
cd myproject

加入依赖, 去自动构建虚拟环境, 使之更新.toml以及uv.lock。

复制代码
uv add requests fastapi

运行代码(自动在项目虚拟环境里执行,不需要手动 ):

复制代码
uv run python main.py

按 uv.lock 精确还原环境的同步依赖, 这种依赖适合 CI 或团队协作。

复制代码
uv sync

进阶用法

· 将 CLI 工具转变为系统命令, 并且不会对全局环境造成污染(pipx 的直接替换物件)。

复制代码
uv tool install comfy-cli   # 装进独立隔离环境,只把 comfy 命令暴露到 PATH
comfy some-command          # 之后直接执行,命令行里不出现 uv,也不用 activate
uv tool update-shell        # 首次使用前跑一次,把暴露命令的目录加进 PATH
uv tool list                # 看装了哪些工具
uv tool upgrade comfy-cli   # 升级
uv tool uninstall comfy-cli # 卸载(连隔离环境一起删掉)

把uv当作pip的直接替代, 这是迁移老项目时最为省事的一种方式。

复制代码
uv pip install -r requirements.txt
uv pip compile requirements.in -o requirements.txt

· 像 npx 一样直接运行工具,不用提前安装:

复制代码
uvx ruff check .
uvx black .

· 多项目 (类似 Cargo 的 概念,适合 ):

在根目录 .toml 里声明

tool.uv.

随后, uv run 或者 uv sync 能够明白子项目相互间的依赖关联, 并非每个子项目都得单独去管理虚拟环境。

锁定那种依赖, 然而却并不进行同步(举例来说, 仅仅是想要去更新 lock 文件, 暂时不把它落实到本地环境之中)。

复制代码
uv lock

即使你的项目仍处于venv加上.txt的时期, 耗费十分钟切换至uv, 很可能就再也不想回去了, 我目前自身所有的项目均已切换到uv, 不会再专门维护.venv的激活步骤。

相关推荐
Patrick在香港1 小时前
Claude + Python 数据管道:一次字段改名,786 行历史数据被静默重写
开发语言·windows·python·claude·数据工程·数据校验·数据管道
the局外人1 小时前
学习 FastAPI 的 Day 3:企业级目录与数据库迁移
后端·python·fastapi
Ray13331 小时前
交付级定时数据管道:改 JSON 声明调度,84 个单测全绿
python
mldong1 小时前
AI Agent 不能自己签字:用 Python 工作流引擎给 AI 加一道人类审批闸门
后端·python·agent
青少儿编程课堂2 小时前
贪心算法进阶:区间调度与最少资源整合解析
c++·python·算法·贪心·信息学竞赛·区间调度
Yanjun2i2 小时前
Agent学习记录六:Tool 类 + Tool Registry
开发语言·python·学习
2601_962381862 小时前
Python异步编程async/await核心用法
python·async/await·事件循环·异步编程·并发调度
量化吞吐机2 小时前
会写代码学量化,先把数据、规则和执行连清楚
人工智能·python
泡干脆面就番茄2 小时前
02_摄像头实时人脸检测与微笑识别
python·opencv