UV 包管理工具:替代 pip 的现代化解决方案

安装

方法一:使用安装脚本

# macOS 和 Linux
curl -LsSf https://astral.sh/uv/install.sh | sh# Windows PowerShell
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

方法二:使用包管理器

# macOS (Homebrew)
brew install uv# Windows (Scoop)
scoop install uv# 通过 pip 安装
pip install uv

入门

使用虚拟环境

1. 创建虚拟环境

# 创建一个新的虚拟环境
uv venv myproject# 创建指定 Python 版本的虚拟环境
uv venv --python 3.11 myproject# 激活虚拟环境
# Linux/macOS:
source myproject/bin/activate
# Windows:
myproject\Scripts\activate

2.安装包

# 安装单个包
uv pip install requests# 安装多个包
uv pip install requests numpy pandas# 安装指定版本的包
uv pip install "django>=4.0,<5.0"# 从 requirements.txt 安装
uv pip install -r requirements.txt

使用uv方式

1.项目初始化

# 初始化一个新项目
uv init my_uv_test
cd my_uv_test
# 查看项目结构
tree ..
├── main.py
├── pyproject.toml
└── README.md1 directory, 3 files

使用 pyproject.toml 管理依赖

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

3. 依赖管理

安装依赖

# 安装项目依赖(从 pyproject.toml)
uv pip install -e .# 安装开发依赖
uv pip install -e ".[dev]"# 安装所有可选依赖
uv pip install -e ".[dev,docs,web]"# 生成锁定文件
uv pip freeze > requirements.lock# 同步依赖(确保环境与 requirements.txt 完全一致)
uv pip sync requirements.txt

添加依赖

# 添加生产依赖
uv add requests
uv add "django>=4.0,<5.0"
uv add requests beautifulsoup4 pandas# 添加开发依赖
uv add --dev pytest black flake8
uv add --dev "pytest>=7.0"# 添加可选依赖组
uv add --group docs sphinx sphinx-rtd-theme
uv add --group web fastapi uvicorn

添加依赖后再次查看pyproject.toml

[project]
name = "my-uv-test"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = ["requests>=2.32.3",
]

运行

uv run 选择 Python 版本的优先级顺序:

1. 明确指定版本(最高优先级)

uv run --python 3.11 script.py
uv run --python python3.12 script.py
uv run --python /usr/bin/python3.10 script.py

2. 项目配置文件

如果有 pyproject.toml

[project]
requires-python = ">=3.9"

或者 .python-version 文件:

3.11.5

3. 环境变量

export UV_PYTHON=3.11
uv run script.py

4. 系统默认 Python

如果以上都没有,uv 会按顺序查找:

  • python3
  • python
  • 系统 PATH 中的第一个可用 Python

建议: 在项目中明确指定 Python 版本,避免环境差异导致的问题

使用 uv 一句话运行 Python 文件

uv run script.py

在没有 pyproject.toml 的情况下,uv 有几种方式来处理依赖:

1. 使用 `--with` 参数临时安装包
uv run --with requests --with pandas script.py
2. 通过脚本内联声明依赖(PEP 723)

在 Python 脚本顶部添加特殊注释:

# /// script
# dependencies = [
#   "requests",
#   "pandas>=1.0",
# ]
# ///import requests
import pandas as pd# 你的代码...

然后直接运行:

uv run script.py
3. 使用 requirements.txt

如果目录下有 requirements.txt,uv 会自动读取:

uv run script.py
4. 完全不管理依赖

如果没有以上任何配置,uv run 会:

  • 创建一个临时的虚拟环境
  • 只安装 Python 标准库
  • 如果脚本导入了第三方包但没有声明依赖,会报 ImportError
    推荐做法: 使用 PEP 723 的内联依赖声明,这样脚本是自包含的,任何人都能直接用 uv run script.py 运行。

uv的优缺点

这是一份很好的 uv 使用指南!我来补充一下 uv 的优缺点分析:

uv 的优缺点

优点 ⭐

1. 极快的速度

  • 用 Rust 编写,比 pip 快 10-100 倍
  • 并行下载和安装包
  • 智能缓存机制

2. 统一的工具链

# 一个工具搞定所有事情
uv venv        # 创建虚拟环境
uv pip install # 包管理
uv run         # 运行脚本
uv add         # 添加依赖

3. 现代化的依赖管理

  • 支持 pyproject.toml

  • 自动生成锁定文件
  • 依赖组管理(dev, docs, test 等)

4. 开箱即用

# 无需预先创建虚拟环境
uv run --with requests script.py

5. PEP 723 支持

# /// script
# dependencies = ["requests"]
# ///
import requests

6. 跨平台一致性

  • Windows、macOS、Linux 行为一致
  • 统一的安装方式

缺点 ⚠️

1. 生态系统兼容性

  • 某些包的构建可能有问题
  • 复杂的 C 扩展包支持不完善
  • 企业环境的私有源配置较复杂

2. 学习成本

  • 新的命令和概念
  • 与传统 pip/virtualenv 工作流不同
  • 团队需要统一工具

3. 相对年轻

  • 社区相对较小
  • 文档和教程不如 pip 丰富
  • 可能存在未发现的 bug

4. 依赖 Rust 生态

  • 某些平台可能缺少预编译二进制
  • 从源码编译需要 Rust 工具链

适用场景

✅ 推荐使用

  • 新项目开发
  • 对速度有要求的 CI/CD
  • 现代 Python 开发工作流
  • 个人项目和学习

❌ 谨慎使用

  • 传统企业环境
  • 复杂的遗留项目
  • 需要特殊包构建的项目
  • 团队对新工具抗拒

总结

uv 是 Python 包管理的未来趋势,特别适合追求效率的现代开发者。虽然还有一些兼容性问题,但其速度和易用性优势明显,值得在新项目中尝试使用。

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

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

相关文章

Java注解规范与使用详解

注解中的空值限制 在Java注解中,元素值不允许使用null引用。这是注解使用中的一项重要约束规则,违反该规则将导致编译错误。需要注意的是,虽然禁止使用null值,但允许为String类型元素指定空字符串(“”),为数组类型元素指定空数组({})。 空值约束示例 以下两种注解用法…

从零开始的数据结构教程(八)位运算与状态压缩

&#x1f3a9; 标题一&#xff1a;位运算基础——魔术师的二进制手套 位运算是一种直接操作数字二进制位的运算方式&#xff0c;它高效且巧妙&#xff0c;就像魔术师戴上了二进制手套&#xff0c;能够精准地操控每一个比特。理解位运算是深入学习状态压缩和其他底层优化技巧的…

GraalVM加持下的Quarkus极速启动

1. 引言 1.1 Quarkus与云原生时代的挑战 随着云原生架构的普及,传统Java应用在部署效率、资源消耗和冷启动性能方面逐渐暴露出短板。Spring Boot等框架虽然功能强大,但在Serverless、边缘计算等场景下表现乏力。 Quarkus 是 Red Hat 推出的一个专为云原生设计的 Java/Kotl…

vue3 el-input type=“textarea“ 字体样式 及高度设置

在Vue 3中&#xff0c;如果你使用的是Element Plus库中的<el-input>组件作为文本域&#xff08;type"textarea"&#xff09;&#xff0c;你可以通过几种方式来设置字体样式和高度。 1. 直接在<el-input>组件上使用style属性 你可以直接在<el-input&…

Matlab中gcb、gcbh、gcs的区别

gcb&#xff1a;返回当前选中模块的完整路径名&#xff08;字符串&#xff09; gcbh&#xff1a;返回当前选中模块的句柄&#xff08;数值标识符&#xff09; gcs&#xff1a;返回当前打开或选中的子系统或顶层模型路径&#xff08;字符串&#xff09;

大语言模型的技术原理与应用前景:从Transformer到ChatGPT

目录 摘要 1. 引言 2. Transformer架构核心原理 2.1 自注意力机制 2.2 位置编码 2.3 前馈神经网络 3. 从GPT到ChatGPT的演进 3.1 GPT系列模型架构 3.2 训练流程优化 4. 应用场景与案例分析 4.1 代码生成 4.2 文本摘要 4.3 问答系统 5. 挑战与未来方向 5.1 当前技…

Flink Table API 编程入门实践

Flink Table API 编程入门实践 前言 Apache Flink 是目前大数据实时计算领域的明星产品&#xff0c;Flink Table API 则为开发者提供了声明式、类似 SQL 的数据处理能力&#xff0c;兼具 SQL 的易用性与编程 API 的灵活性。本文将带你快速了解 Flink Table API 的基本用法&am…

Android之ListView

1&#xff1a;简单列表(ArrayAdapter) 1&#xff1a;运行的结果&#xff1a; 2&#xff1a;首先在MyListView里面创建一个按钮&#xff0c;点击的时候进行跳转。 这里让我吃惊的是&#xff0c;Button里面可以直接设置onClick .java里面的方法。 也即是点击这个按钮之后就会去…

Python(十四)

1.type函数和init_subclass_ init_subclass_ 2.元类 类就是用来创建对象的模版&#xff0c;类是由type创造而来的&#xff0c;元类就是创建类的模版&#xff0c;type可以用来创造类&#xff0c;因为type本身就是一个元类&#xff0c;使用元类来创造类&#xff0c;元类之间也有…

当前用户的Git全局配置情况:git config --global --list

通过config命令可以查询当前用户的全局配置情况。这些配置项定义了 Git 在全局范围内的行为&#xff0c;包括如何处理大文件、SSL 证书验证以及提交时的用户信息。 git config --global --list http.sslVerifyfalse 这个配置项禁用了 SSL 证书验证。这在与自签名证书的 Git 服…

负载均衡群集---Haproxy

目录 一、HAproxy 一、概念 二、核心作用 三、主要功能特性 四、应用场景 五、优势与特点 二、 案例分析 1. 案例概述 2. 案例前置知识点 &#xff08;1&#xff09;HTTP 请求 &#xff08;2&#xff09;负载均衡常用调度算法 &#xff08;3&#xff09;常见的 web …

html5视频播放器和微信小程序如何实现视频的自动播放功能

在HTML5中实现视频自动播放需设置autoplay和muted属性&#xff08;浏览器策略要求静音才能自动播放&#xff09;&#xff0c;并可添加loop循环播放、playsinline同层播放等优化属性。微信小程序通过<video>组件的autoplay属性实现自动播放&#xff0c;同时支持全屏按钮、…

OpenHarmony定制系统组合按键(一)

一、开发环境 系统版本&#xff1a;OpenHarmony 4.0.10.13 设备平台&#xff1a;rk3568 SDK版本&#xff1a;fullSDK 4.0.10.13 DevEco Studio版本&#xff1a;4.1.0.400 二、需求背景 定制OpenHarmony 系统组合按键功能&#xff0c;例如仿Android Power VOL_Up组合键实现截…

相机定屏问题分析四:【cameraserver 最大request buffer超标】后置视频模式预览定屏闪退至桌面

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:相机定屏问题分析三:【配流ConfigStream失败】外屏打开相机视频照片人像来回切换后,相机页面卡死,点击没反应9055522 这一篇我们开始讲: 相机定屏问题分析四:【cameraserver 最大request buffer超…

从 PyTorch 到 TensorFlow Lite:模型训练与推理

一、方案介绍 研发阶段&#xff1a;利用 PyTorch 的动态图特性进行快速原型验证&#xff0c;快速迭代模型设计。 灵活性与易用性&#xff1a;PyTorch 是一个非常灵活且易于使用的深度学习框架&#xff0c;特别适合研究和实验。其动态计算图特性使得模型的构建和调试变得更加直…

4.2.5 Spark SQL 分区自动推断

在本节实战中&#xff0c;我们学习了Spark SQL的分区自动推断功能&#xff0c;这是一种提升查询性能的有效手段。通过创建具有不同分区的目录结构&#xff0c;并在这些目录中放置JSON文件&#xff0c;我们模拟了一个分区表的环境。使用Spark SQL读取这些数据时&#xff0c;Spar…

数据结构:导论

目录 什么是“第一性原理”&#xff1f; 什么是“数据结构”&#xff1f; 数据结构解决的根本问题是什么&#xff1f; 数据结构的两大分类 数据结构的基本操作 数据结构与算法的关系 学习数据结构的底层目标 什么是“第一性原理”&#xff1f; 在正式进入数据结构之前&…

汽车制造场景下Profibus转Profinet网关核心功能与应用解析

在当今工业自动化的浪潮中&#xff0c;各种通讯协议层出不穷&#xff0c;而其中PROFIBUS与PROFINET作为两种主流的工业通信标准&#xff0c;它们之间的转换需求日益增长。特别是对于那些希望实现老旧设备与现代化网络无缝对接的企业来说&#xff0c;一个高效、稳定的网关产品显…

qt ubuntu 20.04 交叉编译

一、交叉编译环境搭建 1.下载交叉编译工具链&#xff1a;https://developer.arm.com/downloads/-/gnu-a 可以根据自己需要下载对应版本&#xff0c;当前最新版本是10.3, 笔者使用10.3编译后的glibc.so版本太高&#xff08;glibc_2.3.3, glibc_2.3.4, glibc_2.3.5&#xff09;…

在Babylon.js中创建3D文字:简单而强大的方法

引言 在3D场景中添加文字是许多WebGL项目的常见需求。Babylon.js提供了多种创建3D文字的方法&#xff0c;其中使用TextBlock结合平面网格是一种简单而高效的方式。本文将介绍如何使用Babylon.js的GUI系统在3D空间中创建美观的文字效果。 方法概述 Babylon.js的GUI系统允许我…