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 项目管理、提高开发效率方面发挥越来越重要的作用,助力开发者专注于核心业务逻辑。

相关推荐
洵有兮6 分钟前
python第四次作业
开发语言·python
kkoral7 分钟前
单机docker部署的redis sentinel,使用python调用redis,报错
redis·python·docker·sentinel
BoBoZz1921 分钟前
IterativeClosestPoints icp配准矩阵
python·vtk·图形渲染·图形处理
test管家43 分钟前
PyTorch动态图编程与自定义网络层实战教程
python
laocooon5238578861 小时前
python 收发信的功能。
开发语言·python
清水白石0081 小时前
《Python 责任链模式实战指南:从设计思想到工程落地》
开发语言·python·责任链模式
沛沛老爹1 小时前
Web开发者快速上手AI Agent:基于LangChain的提示词应用优化实战
人工智能·python·langchain·提示词·rag·web转型
宁大小白1 小时前
pythonstudy Day39
python·机器学习
拾贰_C1 小时前
【VSCode | python | anaconda | cmd | PowerShell】在没有进入conda环境时使用conda命令默认安装位置
vscode·python·conda
大千AI助手1 小时前
基于OpenAPI生成的 SDK 的工业级和消费级概念区别
人工智能·python·机器学习·openai·代码生成·openapi·大千ai助手