Post

Python包管理器:uv工具快速上手

老朋友pip与venv的缺陷 在介绍 uv 之前,让我们先快速回顾一下传统的 Python 项目管理方式——pip+venv 的工作流程: 首先在系统上 安装对应的 Python 版本 ; 创建虚拟环境:python -m venv .venv; 在当前目录 激活环境

先搞技术 阅读 9 点赞 0 评论 0

老朋友pip与venv的缺陷

在介绍 uv 之前,让我们先快速回顾一下传统的 Python 项目管理方式——pip+venv 的工作流程:

  1. 首先在系统上 安装对应的 Python 版本

  2. 创建虚拟环境:python -m venv .venv;

  3. 在当前目录 激活环境

Windows:.venv\Scripts\activate;

macOS/Linux:source .venv/bin/activate;

  1. 使用 pip 安装依赖 :pip install openai;

  2. 生成 依赖文件 :pip freeze > requirements.txt;

  3. 同步 环境依赖 :pip install -r -requirements.txt;

这个流程虽然能用,但是作为开发者,期间会遇到非常多的问题:

  1. :pip 的依赖解析和安装速度,在项目变大时,会变得异常缓慢。

  2. 繁琐 :每次打开新终端,都得手动 source .../activate 才能激活环境,很容易忘记。

  3. 无多版本管理 :运行 python -m venv .venv 命令时,它会使用您当前系统上默认的 Python 版本来 创建虚拟环境,只有已安装的 Python 版本才可以创建虚拟环境,否则无法直接创建。

  4. 依赖不精确 :pip freeze 会把子依赖也冻结进去,但我们真正关心的,其实是 fastapi、uvicorn 这 些直接依赖。这导致了requirements.in 和 requirements.txt 的分离管理,增加了心智负担,同时 pip 没有依赖预检功能,很容易造成依赖冲突。

uv实战上手:三步建立现代化工作流

随着 Python 的普及度越来越高,传统的 pip + venv 的工作流方式已经不太适用,在 2024 年 2 月 uv 也 应运而生,这是由 Astral 公司使用 Rust 开发的一款非常新的 Python 打包和项目管理工具,uv 官方文 档:https://docs.astral.sh/uv/。它以其惊人的速度而闻名,uv 的特点也非常明显:

  • 出身名门 :由开发了 ruff(超快的Python Linter)的Astral公司打造。

  • 快得离谱 :因为它底层是用Rust编写,并且采用了先进的并行处理和全局缓存策略,它的速度可以 比 pip 快 10-100倍

  • 多合一工具箱 :它不仅仅是 pip 的替代品,它还整合了 venv, pip-tools, python 版本管理等工具的 功能,提供了一站式的解决方案。

虽然才诞生一年多,但是越来越多的 Python 项目里都有 uv 的身影,例如:Dify、MCP、A2A、 MetaGPT、FlowRAG、Refly.ai 等。

uv 支持 macOS/Linux/Windows 系统,并且在安装前可以不用配置 Python 环境,使用一行命令即可快 速安装:

# macOS and Linux
curl-LsSf https://astral.sh/uv/install.sh | sh
wget-qO- https://astral.sh/uv/install.sh | sh
curl-LsSf https://astral.sh/uv/0.8.14/install.sh | sh
​
​
# Windows
powershell -ExecutionPolicy ByPass -c"irm https://astral.sh/uv/install.ps1 |
iex"

甚至可以在 Github 上下载 uv 编译好的可执行文件,解压存储到电脑中,同时将该路径添加到环境变量 的 path 中即可,链接:https://github.com/astral-sh/uv/releases

安装成功后,在命令行执行 uv --version 看到版本号即代表成功:

uv --version
uv 0.8.14 (af856fb88 2025-07-01)

现在 uv 将彻底改变你创建和使用虚拟环境的方式,你可以快速通过命令为每个项目创建一个不同版本独 立的 Python 虚拟环境,例如:

uv venv --python3.12

上述命令会在当前目录下创建一个 .venv 的虚拟环境,并安装 python3.12 版本,如果想在命令行激 活当前环境,和以往使用相同的命令即可,如下:

# CMD
.venv\Scripts\activate.bat
# Powershell/win11
.venv\Scripts\activate.ps1
# bash
source .venv/Scripts/activate

另外如果在 win11 下执行 .venv\Scripts\activate.ps1 出现错误,这是因为 PowerShell 执行政策 导致的,可以使用以下方式解决:

# 临时允许脚本(推荐)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
​
​
# 针对当前用户永久放宽
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

这样就可以执行并激活环境了,如下:

同时如果你想使用原先 pip-tools 的工作流,操作技巧也非常简单,只需要在原先的命令前带上 uv 即 可,例如:

uv pip install fastapi "uvicorn[standard]"
uv pip compile requirements.in -o requirements.txt
uv pip sync requirements.txt

这也是传统的工作流,在一个 Python 项目下可能会有一堆配置文件:setup.py, requirements.txt, requirements-dev.txt 等,简直是一场噩梦,所以更推荐使用 uv+pyproject.toml 这种工作流方式, 这是一个由官方PEP标准定义的、统一的配置文件,用于存放:

  • 项目基本信息(项目名、版本、作者...)

  • 项目依赖 (dependencies)

  • 开发环境依赖 (dev-dependencies)

构建工具配置

测试、Linter等工具的配置

uv 天生就围绕这个文件工作,为我们提供了一套极致丝滑的体验,在项目下运行 uv init 即可自动生 成这些配置,基础配置如下:

[project]
name = "mas-study"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"openai>=1.102.0",
]

在这个工作流下,我们就可以完全抛弃 pip-tools 的写法,而是使用 uv 提供的其他命令:

  • 安装依赖:uv add fastapi "uvicorn[standard]",该命令会自动将依赖的版本写入到 pyproject.toml 中,同时为该依赖添加锁 uv.lock ,以确保环境完全一致,无需手动编辑 requirements.in 在生成 requirements.txt

  • 卸载依赖:uv remove fast api "uvicorn[standard]",该命令会卸载依赖,并移除依赖中的版本信 息与锁;

  • 开发环境依赖:在 addremove 命令后带上 --dev 参数,即会添加或者移除一个开发依赖;

  • 执行命令:以往需要激活环境后才能运行命令,现在可以执行运行 uv run <command> 在项目中 快速执行命令而无需提前激活;

  • 同步环境:uv sync,该命令会按照 pyproject.toml 创建一个虚拟环境,并安装所有的依赖信 息;

哪怕整个项目想同步创建一份 pip-tools 的依赖文件,也可以通过 uv export -o requirements.txt 快速生成,高效与兼容两不误,当然关于 export 这个命令还有很多参数的写法,感 兴趣的同学可以在课后和 DeepSeek 聊天获取。

uv 常用命令速查表

虽然在项目中使用的 uv 命令并不多,为了方便大家在后续开发中随时查阅,我为大家整理了一份更详尽 的 uv 命令速查表,覆盖了从项目初始化到日常开发的方方面面,希望对大家有帮助:

任务分

命令

描述

项目环 境管理

uv init

初始化项目,交互式生成pyproject.toml和.venv虚拟 环境。

uv venv

在当前目录(需有pyproject.toml)或指定目录创建虚 拟环境。

uv run <command>

在项目虚拟环境中执行命令(如uv run python main.py)。 无需手动激活环境,强烈推荐!

rm -rf .venv

删除虚拟环境。uv暂无内置删除命令,直接删除文件 夹即可。

依赖管

uv add <package>

添加一个或多个项目依赖。自动更新pyproject.toml和 uv.lock。

uv add "fastapi>=0.100"

添加依赖并指定版本范围

uv add <package> --dev

添加一个或多个开发依赖(如pytest, ruff)。

uv remove <package>

移除一个项目依赖,并自动更新相关文件。

uv remove <package> -- dev

移除一个开发依赖。

uv sync

根据uv.lock文件同步核心依赖到虚拟环境,确保环境 一致性。

uv sync --dev

同步核心依赖和开发依赖。团队协作和CI/CD的必备命 令。

环境审

uv show

以树状图显示当前项目的依赖关系。检查依赖冲突的神 器! (uv tree是它的别名)

uv pip list

以列表形式显示当前环境中所有已安装的包及其版本。

uv pip freeze

以requirements.txt格式输出所有已安装的包,包括子 依赖。

经典模

uv pip install <package>

快速安装一个包到当前环境,但不会更新 pyproject.toml。适合临时测试。

uv pip install -r req.txt

从requirements.txt文件安装依赖。

uv pip uninstall <package>

从当前环境卸载一个包。

任务分

命令

描述

uv pip compile req.in -o req.txt

将requirements.in文件编译为锁定的 requirements.txt。迁移老项目的利器。

缓存工 具管理

uv cache dir

显示uv全局缓存的目录位置。

uv cache clean

清理uv的全局缓存。遇到奇怪的安装问题时,可以尝 试此命令。

uv self update

更新uv工具本身到最新版本。

评论