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

news2025/3/31 6:28:48

在 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 安装。示例如下:

# 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 文件,便于验证环境配置。
$ 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,你会看到类似如下的示例代码:

def main():
    print("Hello from myproject!")

if __name__ == "__main__":
    main()

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

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

3.2 环境同步与运行

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

$ 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 直接运行项目:

$ uv run .\hello.py
Hello from myproject!

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

3.3 管理依赖

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

$ 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 中看到相应的依赖分组,例如:

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

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

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

$ 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 中的依赖分组管理,你可以根据项目需求将依赖划分为开发环境和生产环境。如下示例展示了如何分别为开发和生产环境添加依赖:

$ 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 文件中,会自动生成类似如下的配置,清晰区分不同环境下的依赖关系:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2323106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sqlserver 阻止保存要求重新创建表的更改

1 选择 “工具” 菜单,然后点击 “选项” 2 进入选项界面后,选择 “设计器”,取消勾选 “阻止保存要求重新创建表的更改” 选项,点击 “确定”

5.Excel:从网上获取数据

一 用 Excel 数据选项卡获取数据的方法 连接。 二 要求获取实时数据 每1分钟自动更新数据。 A股市场_同花顺行情中心_同花顺财经网 用上面方法将数据加载进工作表中。 在表格内任意区域右键,刷新。 自动刷新: 三 缺点 Excel 只能爬取网页上表格类型的…

在word中使用zotero添加参考文献并附带超链接

一、引言 在写大论文时,为了避免文中引用与文末参考文献频繁对照、修改文中引用顺序/引用文献时手动维护参考文献耗易出错,拟在 word 中使用 zotero 插入参考文献,并为每个参考文献附加超链接,实现交互式阅读。 版本&#xff1a…

性能测试、负载测试、压力测试的全面解析

在软件测试领域,性能测试、负载测试和压力测试是评估系统稳定性和可靠性的关键手段。​它们各自关注不同的测试目标和应用场景,理解这些差异对于制定有效的测试策略至关重要。 本文对性能测试、负载测试和压力测试进行深入分析,探讨其定义、…

Redis中的数据类型与适用场景

目录 前言1. 字符串 (String)1.1 特点1.2 适用场景 2. 哈希 (Hash)2.1 特点2.2 适用场景 3. 列表 (List)3.1 特点3.2 适用场景 4. 集合 (Set)4.1 特点4.2 适用场景 5. 有序集合 (Sorted Set)5.1 特点5.2 适用场景 6. Redis 数据类型的选型建议结语 前言 Redis 作为一款高性能的…

gz sim机器人SDF模型 [持续更新]

机器人SDF模型 linklink的一级pose材质 plugin话题信息通信键盘操作plugin Sensor传感器imu 不算教学&#xff0c;个人的记录 sdf的格式跟urdf有所不同&#xff0c;必须是完整的一个包括&#xff0c;比如< pose></ pose>这样前一个后一个&#xff0c;urdf中是有<…

【MySQL | 六、索引特性(进一步理解)】

目录 索引的理解索引的作用MySQL与磁盘的IOPage单个Page的分类多个Page的组织B树的特点 B树和B树的区别聚簇索引 VS 非聚簇索引聚簇索引的优缺点非聚簇索引的优缺点 创建索引常见索引分为&#xff1a;主键索引InnoDB主键索引的生成过程&#xff08;1&#xff09;初始化&#xf…

计算机网络高频(三)UDP基础

计算机网络高频(三)UDP基础 1.UDP的头部格式是什么样的?⭐ UDP 头部具有以下字段: 源端口(Source Port):16 位字段,表示发送方的端口号。目标端口(Destination Port):16 位字段,表示接收方的端口号。长度(Length):16 位字段,表示 UDP 数据报(包括头部和数据部…

【测试开发】OKR 小程序端黑盒测试报告

【测试报告】OKR 小程序端 项目名称版本号测试负责人测试完成日期联系方式OKR 小程序端4.0马铭胜2025-03-2515362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中&#xff0c;个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而&#xff0c;如何设定…

部署高可用PostgreSQL14集群

目录 基础依赖包安装 consul配置 patroni配置 vip-manager配置 pgbouncer配置 haproxy配置 验证 本文将介绍如何使用Patroni、Consul、vip-manager、Pgbouncer、HaProxy组件来部署一个3节点的高可用、高吞吐、负载均衡的PostgresSQL集群&#xff08;14版本&#xff09;&…

Vue3中keep-alive缓存组件应用场景。

文章目录 一、KeepAlive是什么&#xff1f;二、基本使用1.例子2.keep-alive使用 三、其他属性3.1 包含/排除3.2 最大缓存实例数3.3 缓存实例的生命周期 总结 一、KeepAlive是什么&#xff1f; 是一个内置组件&#xff0c;它的功能是在多个组件间动态切换时缓存被移除的组件实例…

CosyVoice2在Windows系统上本地部署的详细步骤

CosyVoice2在Windows系统上本地部署的详细步骤&#xff1a; 下载源码并初始化&#xff1a; 确保你的设备上安装了Git。打开命令提示符&#xff08;cmd&#xff09;&#xff0c;执行以下命令来克隆仓库&#xff1a;git clone --recursive https://github.com/FunAudioLLM/CosyVo…

鸿蒙入门——ArkUI 跨页面数据同步和应用全局单例的UI状态存储AppStorage 小结(三)

文章大纲 引言一、AppStorage 应用全局的UI状态存储1、StorageProp和StorageLink装饰器建立联系2、StorageProp2.1、StorageProp使用规则2.2、StorageProp变量的传递/访问规则2.3、StorageProp支持的观察变化2.4、StorageProp 值初始化和更新 3、StorageLink3.1、StorageLink使…

海思烧录工具HITool电视盒子刷机详解

HiTool是华为开发的一款用于海思芯片设备的刷机和调试工具&#xff0c;可对搭载海思芯片的机顶盒、智能电视等设备进行固件烧录、参数配置等操作。以下为你详细介绍&#xff1a; 功能用途 固件烧录&#xff1a;这是HiTool最主要的功能之一。它能够将下载好的适配固件文件烧录到…

使用VS2022编译CEF

前提 选择编译的版本 CEF自动编译&#xff0c;在这里可以看到最新的稳定版和Beta版。 从这里得出&#xff0c;最新的稳定版是134.0.6998.118&#xff0c;对应的cef branch是6998。通过这个信息可以在Build requirements查到相关的软件配置信息。 这里主要看Windows下的编译要…

Pytorch学习笔记(八)Learn the Basics - Save and Load the Model

这篇博客瞄准的是 pytorch 官方教程中 Learn the Basics 章节的 Save and Load the Model 部分。 官网链接&#xff1a;https://pytorch.org/tutorials/beginner/basics/saveloadrun_tutorial.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwdaa2m …

MATLAB 绘制空间分布图 方法总结

方法一&#xff1a;用mapshow函数 figure(1); hold on %% 添加陆地 land shaperead(landareas); mapshow(landareas.shp, FaceColor, [1 1 1], EdgeColor, [0.3 0.3 0.3],FaceAlpha,0)%% 添加站点 for i 1:size(mycmap,1)mapshow(lon(label i),lat(label i),displaytype,po…

Docker+Ollama+Xinference+RAGFlow+Dify+Open webui部署及踩坑问题

目录 一、Xinference部署 &#xff08;一&#xff09;简介 &#xff08;二&#xff09;部署 &#xff08;三&#xff09;参数 &#xff08;四&#xff09;错误问题 &#xff08;五&#xff09;Xinference配置Text-embedding模型 &#xff08;六&#xff09;Xinference配…

Axure项目实战:智慧城市APP(四)医疗信息(动态面板、选中交互应用)

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;智慧城市APP医疗信息模块 主要内容&#xff1a;医疗信息模块原型设计与交互 应用场景&#xff1a;医疗信息行业 案例展示&#xff1a; 案例视频&…

【网络通信安全】基于华为 eNSP 的链路聚合、手工负载分担模式与 LACP 扩展配置 全解析

目录 一、引言 二、链路聚合技术基础 2.1 链路聚合的定义与作用 2.2 链路聚合的工作原理 2.3 链路聚合的模式分类 三、华为 eNSP 简介 3.1 eNSP 的概述 3.2 eNSP 的安装与配置 3.2.1 安装环境要求 3.2.2 安装步骤 3.2.3 配置虚拟网卡 四、手工负载分担模式配置 4.…