Python 包管理新时代:深入了解 `uv` 的使用与实践

目录

  • 前言
  • [1 `uv` 是什么?](#1 uv 是什么?)
    • [1.1 基本介绍](#1.1 基本介绍)
    • [1.2 核心优势](#1.2 核心优势)
  • [2 安装 `uv`](#2 安装 uv)
    • [2.1 使用官方脚本安装(推荐)](#2.1 使用官方脚本安装(推荐))
    • [2.2 使用 `cargo` 安装(Rust 开发者适用)](#2.2 使用 cargo 安装(Rust 开发者适用))
  • [3 `uv` 的核心功能详解](#3 uv 的核心功能详解)
    • [3.1 初始化虚拟环境](#3.1 初始化虚拟环境)
    • [3.2 安装依赖包](#3.2 安装依赖包)
    • [3.3 冻结依赖(Freeze)](#3.3 冻结依赖(Freeze))
    • [3.4 卸载依赖](#3.4 卸载依赖)
    • [3.5 虚拟环境激活与执行命令](#3.5 虚拟环境激活与执行命令)
  • [4 `uv` 与 `pip` 的详细对比](#4 uvpip 的详细对比)
  • [5 实战:用 `uv` 创建一个 Flask 项目](#5 实战:用 uv 创建一个 Flask 项目)
  • [6 仅此一次:常用 `uv` 命令速查表](#6 仅此一次:常用 uv 命令速查表)
  • [7 总结与展望](#7 总结与展望)

前言

在 Python 的生态中,依赖管理一直是开发者绕不开的问题。尽管 Python 官方推荐使用 venv + pip 来创建虚拟环境并安装依赖,但随着项目复杂度提升,这种方式逐渐暴露出依赖冲突、安装速度慢、环境不易重现等问题。为此,社区诞生了诸如 poetrypip-toolsvirtualenv 等第三方工具,以补足官方方案的不足。

然而,它们通常功能割裂、配置复杂,难以一体化统一管理。

uv,由 Astral 团队开发,是近年来迅速崛起的一款现代化 Python 包和虚拟环境管理工具。它以极致的安装速度、原生虚拟环境支持、完整锁定机制和友好的 CLI 界面,正在成为 pip 的有力替代品。

本文将系统介绍 uv 的核心功能、使用方法,并与 pip 进行全面对比,帮助你在现代 Python 项目中高效管理依赖。

1 uv 是什么?

1.1 基本介绍

uv 是一个使用 Rust 语言编写的现代 Python 包管理工具,它集成了以下功能:

  • 虚拟环境管理(替代 venvvirtualenv
  • 包的快速安装和卸载(兼容 pip 生态)
  • 自动解析和锁定依赖关系(类似 poetrypip-tools
  • 内置项目初始化、环境激活、执行 Python 脚本等常用操作

它的目标是成为 Python 项目开发过程中的「包管理全能选手」,实现开发、测试、部署中的环境一致性和效率最大化。

1.2 核心优势

  • 🚀 速度快 :基于 Rust 构建,安装速度远超 pip,尤其在冷启动或首次构建时表现突出
  • 🧩 依赖解析强:内置依赖解析器,避免版本冲突
  • 📦 一体化管理:将虚拟环境、依赖安装、锁文件管理等功能合并,避免多工具组合
  • ☁️ 支持未来场景:适配云原生和容器场景,适合 CI/CD 中部署使用

2 安装 uv

2.1 使用官方脚本安装(推荐)

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

该命令会自动下载并安装 uv 的可执行文件,并添加至 $HOME/.cargo/bin 路径下。

2.2 使用 cargo 安装(Rust 开发者适用)

如果你已经安装了 Rust 编译器,也可以使用 cargo 直接安装:

bash 复制代码
cargo install uv

安装完成后,可使用 uv --version 检查是否安装成功。

3 uv 的核心功能详解

3.1 初始化虚拟环境

uv 提供了简洁的虚拟环境创建命令:

bash 复制代码
uv venv

执行后将在当前目录创建 .venv 文件夹,并自动识别 Python 解释器版本,无需额外配置。

3.2 安装依赖包

在虚拟环境中安装依赖,只需使用:

bash 复制代码
uv pip install requests

该命令行为与 pip 完全一致,但速度更快,依赖解析更安全。

还支持批量安装依赖:

bash 复制代码
uv pip install -r requirements.txt

或使用生成锁文件的方式:

bash 复制代码
uv pip install flask numpy --generate-lockfile

生成的 uv.lock 文件可确保团队成员或生产环境的依赖版本完全一致。

3.3 冻结依赖(Freeze)

类似 pip freeze,可输出当前安装的依赖及版本号:

bash 复制代码
uv pip freeze > requirements.txt

也可以使用 uv pip compile 来生成更精确的依赖树,类似 pip-toolspip-compile

3.4 卸载依赖

bash 复制代码
uv pip uninstall requests

命令形式同 pip,使用体验无缝迁移。

3.5 虚拟环境激活与执行命令

  • 激活环境:
bash 复制代码
uv venv activate

在 Linux/macOS 中,会激活 .venv 环境,相当于:

bash 复制代码
source .venv/bin/activate
  • 执行环境中的 Python 命令:
bash 复制代码
uv venv exec python app.py

这样可以避免直接进入虚拟环境,适合在 CI/CD 脚本或 makefile 中使用。

4 uvpip 的详细对比

特性 pip uv
安装速度 普通 极快(Rust 实现)
虚拟环境支持 需配合 venv/virtualenv 原生支持,自动创建
依赖锁定 不支持 原生 uv.lock
兼容性 完全兼容 pip
freeze 输出 有,更清晰
compile 支持 有(uv pip compile
是否 all-in-one
CLI 体验 标准 更现代,命令统一

uv 适用场景

  • 个人开发:更快的依赖管理体验
  • 团队协作:统一的锁文件,避免"在我电脑上没问题"
  • 云原生部署:一键安装,快速构建生产镜像
  • 自动化脚本:便于集成进 DevOps 流程

5 实战:用 uv 创建一个 Flask 项目

以下是一个从零开始,用 uv 构建 Python 项目的完整流程:

bash 复制代码
 新建项目目录
mkdir my-flask-app && cd my-flask-app

 初始化虚拟环境
uv venv

 安装 Flask,并生成锁文件
uv pip install flask --generate-lockfile

 冻结当前依赖
uv pip freeze > requirements.txt

 创建 app.py
echo "from flask import Flask; app = Flask(__name__); @app.route('/')\ndef home(): return 'Hello, uv!'" > app.py

 启动应用
uv venv exec python app.py

此流程中,uv 完全替代了 python -m venvpip installrequirements.txt 管理、以及虚拟环境激活命令,开发体验非常清晰。

6 仅此一次:常用 uv 命令速查表

  • uv venv:创建虚拟环境
  • uv venv activate:激活环境
  • uv venv exec <cmd>:执行虚拟环境中的命令
  • uv pip install <pkg>:安装包
  • uv pip uninstall <pkg>:卸载包
  • uv pip install -r requirements.txt:安装依赖列表
  • uv pip freeze > requirements.txt:导出依赖
  • uv pip compile:生成精准依赖树
  • uv lock:生成锁文件

7 总结与展望

随着 Python 项目的规模增长和部署需求的提升,传统的 pip 工具已经难以满足现代开发的需求。uv 的出现,为开发者带来了更快、更安全、更现代的依赖管理体验,尤其适合 DevOps 场景、协作开发和容器化部署。

它不仅能无缝兼容现有的 pip 项目,还通过内建的虚拟环境管理、依赖锁定和 CLI 工具链,大大简化了 Python 项目的生命周期管理。

如果你厌倦了多工具组合(如 venv + pip + pip-tools),希望拥有一个统一、极速、稳定的开发体验,不妨尝试将你的下一个项目交给 uv 管理,相信你会爱上这种新方式。

推荐阅读:

相关推荐
cdg==吃蛋糕14 分钟前
selenium 使用方法
开发语言·python
Y1nhl1 小时前
力扣_二叉树的BFS_python版本
python·算法·leetcode·职场和发展·宽度优先
Q_Q5110082852 小时前
python的婚纱影楼管理系统
开发语言·spring boot·python·django·flask·node.js·php
若兰幽竹2 小时前
【从零开始编写数据库:基于Python语言实现数据库ToyDB的ACID特性】
数据库·python
xiaocainiao8812 小时前
Python 实战:构建 Git 自动化助手
git·python·自动化
nightunderblackcat2 小时前
新手向:使用Python将多种图像格式统一转换为JPG
开发语言·python
engchina3 小时前
Python PDF处理库深度对比:PyMuPDF、pypdfium2、pdfplumber、pdfminer的关系与区别
开发语言·python·pdf
Lo-Y-eH3 小时前
Openpyxl:Python操作Excel的利器
python·excel
DAWN_T173 小时前
Transforms
pytorch·python·机器学习·jupyter·pycharm
一百天成为python专家3 小时前
python库之jieba 库
开发语言·人工智能·python·深度学习·机器学习·pycharm·python3.11