uv:Rust 驱动的 Python 包管理新时代

在 Python 包管理工具层出不穷的今天,pippip-toolspoetryconda 等各有千秋。而今天要介绍的 uv,则是一款由 Astral 团队推出、采用 Rust 编写的全新工具,目标直指成为 "Python 的 Cargo"。它不仅在性能上表现优异,而且在功能和易用性上都为开发者提供了一站式的解决方案。


1. uv 的亮点

与传统工具相比,uv 在以下几个方面脱颖而出:

  • 极速安装

    得益于 Rust 的高性能,uv 在处理依赖安装时速度快得惊人,远超其他同类工具。

  • 一体化体验

    uv 不仅能高效管理包依赖,还能自动构建和管理虚拟环境、协调 Python 版本,从项目初始化到依赖同步都能轻松应对。

  • 开源且社区有力支持

    采用 MIT 许可发布,背靠 Astral 的技术实力与资本支持,无论是新手还是老手,都能快速上手,并期待未来更多功能的拓展。

使用 uv,就像使用 Node.js 或 Rust 中的依赖管理工具一样简单直观,助你专注于代码本身,而非琐碎的环境配置。


2. uv 的安装方式

安装 uv 非常便捷,官方提供了多种安装方法,既可以直接运行安装脚本,也可以通过 pip 安装。示例如下:

bash 复制代码
# macOS 与 Linux 用户可运行:
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows 用户可在 PowerShell 中执行:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

# 或者通过 pip 安装:
pip install uv

安装完成后,可以使用以下命令检查 uv 是否成功安装:


3. uv 的实际应用

使用 uv 管理 Python 项目不仅简化了环境搭建,也让依赖管理变得前所未有的简单。以下将通过几个实际案例展示 uv 的常见用法。

3.1 项目初始化

在 uv 的世界中,创建一个项目只需简单创建一个文件夹,然后用 uv init 命令初始化项目。该命令会自动生成一些默认文件,包括:

  • pyproject.toml:记录项目的基本信息、依赖版本和支持的 Python 版本。
  • uv.lock:用于锁定所有依赖(及其传递依赖),确保跨平台安装一致性。
  • 示例代码 :一个简单的 hello.py 文件,便于验证环境配置。
bash 复制代码
$ uv init myproject
Initialized project `myproject` at `D:\projects\python\myproject`

$ cd myproject
$ ls
目录: D:\projects\python\myproject
 Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2025/03/24 12:06:08          109 .gitignore
-a----       2025/03/24 12:06:08            5 .python-version
-a----       2025/03/24 12:06:08           87 hello.py
-a----       2025/03/24 12:06:08          155 pyproject.toml
-a----       2025/03/24 12:06:08            0 README.md

打开 hello.py,你会看到类似如下的示例代码:

python 复制代码
def main():
    print("Hello from myproject!")

if __name__ == "__main__":
    main()

同时,pyproject.toml 文件中记录了项目名称、版本、描述以及所需 Python 版本等基本信息。

提示:项目初始化后,uv 自动将项目纳入 Git 版本管理,方便后续协作与版本追踪。

3.2 环境同步与运行

项目创建完成后,第一步就是同步项目依赖。uv 会自动检测或下载适合的 Python 版本,并在项目目录下创建虚拟环境,同时生成完整的依赖锁定文件 uv.lock

bash 复制代码
$ uv sync
Using CPython 3.12.4 interpreter at: D:\miniconda3\envs\databook\python.exe
Creating virtual environment at: .venv
Resolved 1 package in 15ms
Audited in 0.05ms

依赖同步完毕后,即可用 uv 直接运行项目:

bash 复制代码
$ uv run .\hello.py
Hello from myproject!

无需再依赖传统的 python hello.py 命令,uv 为你提供了统一的项目运行入口。

3.3 管理依赖

依赖管理是 uv 的核心功能之一。添加、更新或删除依赖均可通过 uv 命令轻松完成。例如,安装 pandas 包:

bash 复制代码
$ uv add pandas
Resolved 7 packages in 3.41s
Prepared 6 packages in 4.63s
Installed 6 packages in 1.80s
+ numpy==2.2.1
+ pandas==2.2.3
+ python-dateutil==2.9.0.post0
+ pytz==2024.2
+ six==1.17.0
+ tzdata==2024.2

安装后,uv.lock 文件将自动记录所有新增的依赖及其传递依赖。你可以在项目的 pyproject.toml 中看到相应的依赖分组,例如:

toml 复制代码
[project]
name = "myproject"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []

[dependency-groups]
# 默认依赖、开发依赖或生产依赖均可通过不同分组管理

在移除依赖时,uv 也会自动删除不再需要的传递依赖,确保依赖树的干净整洁。

bash 复制代码
$ uv remove pandas
Resolved 1 package in 12ms
Uninstalled 6 packages in 1.18s
- numpy==2.2.1
- pandas==2.2.3
- python-dateutil==2.9.0.post0
- pytz==2024.2
- six==1.17.0
- tzdata==2024.2

再次运行项目时,如果依赖已被移除,将会提示找不到模块,从而帮助你及时调整依赖配置。

3.4 区分开发与生产环境

uv 也支持类似 Node.js 或 Rust 中的依赖分组管理,你可以根据项目需求将依赖划分为开发环境和生产环境。如下示例展示了如何分别为开发和生产环境添加依赖:

bash 复制代码
$ uv add --group dev pandas
Resolved 7 packages in 1.72s
Installed 6 packages in 1.39s
+ numpy==2.2.1
+ pandas==2.2.3
+ python-dateutil==2.9.0.post0
+ pytz==2024.2
+ six==1.17.0
+ tzdata==2024.2

$ uv add --group production requests
Resolved 12 packages in 2.72s
Prepared 5 packages in 1.31s
Installed 5 packages in 68ms
+ certifi==2024.12.14
+ charset-normalizer==3.4.1
+ idna==3.10
+ requests==2.32.3
+ urllib3==2.3.0

pyproject.toml 文件中,会自动生成类似如下的配置,清晰区分不同环境下的依赖关系:

toml 复制代码
[project]
name = "myproject"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []

[dependency-groups]
dev = [
    "pandas>=2.2.3",
]
production = [
    "requests>=2.32.3",
]

4. 后记

随着 uv 不断迭代更新,其功能将愈加完善。未来版本中,uv 有望支持构建和发布 Python 包到 PyPI,并进一步优化跨平台支持和性能表现。可以预见,uv 将在简化 Python 项目管理、提高开发效率方面发挥越来越重要的作用,助力开发者专注于核心业务逻辑。

相关推荐
处女座_三月8 分钟前
大模型架构记录13【hr agent】
人工智能·python·深度学习·langchain
这里有鱼汤12 分钟前
一学就会!Python链式编程,轻松优化你的代码
后端·python
带娃的IT创业者24 分钟前
《Python Web部署应知应会》No2:如何基于FastAPI 和 OLLAMA 架构实现高并发 AI 推理服务
python·架构·flask·fastapi
databook34 分钟前
『Plotly实战指南』--饼图绘制高级篇
python·数据分析·数据可视化
Edward-tan1 小时前
Django接入 免费的 AI 大模型——讯飞星火(2025年4月最新!!!)
后端·python·django
AI视觉网奇1 小时前
最小二乘求解器lstsq,处理带权重和L2正则的线性回归
pytorch·python·线性回归
起个破名想半天了2 小时前
python实现股票数据可视化
python·数据分析·股票数据可视化·poltly
weixin_502539852 小时前
rust学习笔记21-闭包
笔记·学习·rust
橘右溪2 小时前
Windows 下 Rust 快速安装指南
rust
fundroid3 小时前
Rust 为什么不适合开发 GUI
开发语言·后端·rust