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的激活步骤。

相关推荐
李航19832 小时前
自动动手开发图形引擎,不仅能AI建模,还能AI渲染
人工智能·python·计算机视觉·ai·ai编程
LeoCrawls2 小时前
Python 读取 JSON 常见报错排查,附完整处理函数
python·json·php
zzZ··*2 小时前
CodeBuddy 用量看板:本地解析 Token 与积分消耗,不联网不上传
python·vue·ai编程
小猴子爱上树2 小时前
跨马翻译:批量图片翻译+视频字幕+智能抠图一站式工具
python·音视频
小朱爱编程1233 小时前
我用 Jev 做了三个实用工具:整理标签页、分诊飞书反馈、找回 GitHub 收藏
java·开发语言·人工智能·后端·python·架构·ai编程
TomEval3 小时前
【测AI】第06篇:数据清洗实战 —— Pandas 处理爬取的 JD 数据
人工智能·python·自动化·aigc·pandas
全栈练习生3 小时前
大模型反向传播与梯度下降
python·ai
小小张说故事4 小时前
Python logging 日志不输出?根源在 propagate 这条链上
后端·python
喜欢打篮球的普通人4 小时前
MiniMind 学习笔记(十):优化器、学习率和数据设置——训练稳定性的三块基石
笔记·python·学习
醇氧4 小时前
uvicorn 详细介绍
linux·运维·python·python3.11