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

news2025/6/4 11:25:18

安装

方法一:使用安装脚本

# 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.md

1 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.coloradmin.cn/o/2396480.html

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

相关文章

YOLOv8 实战指南:如何实现视频区域内的目标统计与计数

文章目录 YOLOv8改进 | 进阶实战篇&#xff1a;利用YOLOv8进行视频划定区域目标统计计数1. 引言2. YOLOv8基础回顾2.1 YOLOv8架构概述2.2 YOLOv8的安装与基本使用 3. 视频划定区域目标统计的实现3.1 核心思路3.2 完整实现代码 4. 代码深度解析4.1 关键组件分析4.2 性能优化技巧…

matlab实现VMD去噪、SVD去噪,源代码详解

为了更好的利用MATLAB自带的vmd、svd函数&#xff0c;本期作者将详细讲解一下MATLAB自带的这两个分解函数如何使用&#xff0c;以及如何画漂亮的模态分解图。 VMD函数用法详解 首先给出官方vmd函数的调用格式。 [imf,residual,info] vmd(x) 函数的输入&#xff1a; 这里的x是待…

SQLite软件架构与实现源代码浅析

概述 SQLite 是一个用 C 语言编写的库&#xff0c;它成功打造出了一款小型、快速、独立、具备高可靠性且功能完备的 SQL 数据库引擎。本文档将为您简要介绍其架构、关键组件及其协同运作模式。 SQLite 显著特点之一是无服务器架构。不同于常规数据库&#xff0c;它并非以单独进…

JAVA实战开源项目:精简博客系统 (Vue+SpringBoot) 附源码

本文项目编号 T 215 &#xff0c;文末自助获取源码 \color{red}{T215&#xff0c;文末自助获取源码} T215&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

通过openpyxl在excel中插入散点图

实现代码 # -*- coding: utf-8 -*- """ Created on Sat May 31 23:30:12 2025author: anyone """from openpyxl import load_workbook from openpyxl.chart import ScatterChart, Reference, Series from openpyxl.chart.series import SeriesL…

基于cornerstone3D的dicom影像浏览器 第二十五章 自定义VR调窗工具

文章目录 前言一、三维调窗原理二、自定义三维调窗工具三、调用流程1. 修改mprvr.js2. 修改DispalyerArea3D.vue3. view3d.vue4. Toolbar3D.vue 总结 前言 从cornerstoneTools BaseTool派生VolumeShiftColorTool&#xff0c;实现鼠标键按下并移动时&#xff0c;对3D窗口的pres…

经典面试题:一文了解常见的缓存问题

在面试过程中&#xff0c;面试官的桌子上摆放着很多高频的面试题&#xff0c;能否顺利回答决定了你面试通过的概率。其中缓存问题就是其中的一份&#xff0c;可以说掌握缓存问题及解决方法是面试前必须准备的内容。那么缓存有什么典型的问题&#xff0c;出现的原因是什么&#…

GC1267F:单相全波风扇电机预驱动芯片解析

在现代电子设备中&#xff0c;风扇电机的驱动控制是散热系统的关键组成部分。GC1267F 是一款由浙江新麦科技有限公司生产的单相全波风扇电机预驱动芯片&#xff0c;适用于需要大风量和大电流的服务器以及消费类电器风扇电机驱动。 芯片特性 GC1267F 支持外部 PWM 信号的变速功…

Linux --进程状态

目录 进程状态(宏观) Linux进程状态 进程状态的查看 进程状态(宏观) 为了了解Linux的进程状态&#xff0c;首先我们得了解进程状态&#xff0c;因为不仅仅是在Linux下有进程状态&#xff0c;macos和windows下都有进程状态&#xff0c;这里先解释的是一个宏观概念下的&#xff…

智能手机上用Termux安装php+Nginx

Termux的官方网站&#xff1a;Termux | The main termux site and help pages. 以下是在 Termux 上安装和配置 PHP Nginx 的完整流程总结&#xff0c;包含关键步骤和命令&#xff1a; 一、安装依赖 pkg update && pkg upgrade # 更新包列表和系统pkg install nginx p…

Visual Studio 调试中 PDB 与图像不匹配

Visual Studio 调试中 PDB 与图像不匹配 在使用 Visual Studio 进行本地或远程调试时&#xff0c;很多开发者会遇到 PDB 加载失败、符号不匹配的问题&#xff0c;甚至程序进程未退出&#xff0c;导致 .exe 文件无法成功覆盖。本文详细解析了从后台进程清理、构建产物验证、模块…

设计模式——策略设计模式(行为型)

摘要 策略设计模式是一种行为型设计模式&#xff0c;它定义了一系列算法并将每个算法封装起来&#xff0c;使它们可以相互替换。该模式让算法的变化独立于使用算法的客户&#xff0c;从而使得算法可以灵活地切换和扩展。其主要角色包括策略接口、具体策略类和环境类。策略模式…

保持本地 Git 项目副本与远程仓库完全同步

核心目标&#xff1a; 保持本地 Git 项目副本与 GitHub 远程仓库完全同步。 关键方法&#xff1a; 定期执行 git pull 命令。 操作步骤&#xff1a; 进入项目目录&#xff1a; 在终端/命令行中&#xff0c;使用 cd 命令切换到你的项目文件夹。执行拉取命令&#xff1a; 运行…

设计模式——模版方法设计模式(行为型)

摘要 模版方法设计模式是一种行为型设计模式&#xff0c;定义了算法的步骤顺序和整体结构&#xff0c;将某些步骤的具体实现延迟到子类中。它通过抽象类定义模板方法&#xff0c;子类实现抽象步骤&#xff0c;实现代码复用和算法流程控制。该模式适用于有固定流程但部分步骤可…

Deepin 20.9社区版安装Docker

个人博客地址&#xff1a;Deepin 20.9社区版安装Docker | 一张假钞的真实世界 注意事项 Deepin 20.9 社区版安装 Docker 需要注意两点&#xff1a; 因为某些原因&#xff0c;Docker 官方源基本不可用&#xff0c;所以需要使用镜像源进行安装。当然也可以用安装包直接安装&am…

纯数据挖掘也能发Microbiome?

抗生素滥用导致多重耐药微生物在全球蔓延&#xff0c;但新型抗生素的研发进展缓慢&#xff0c;亟需找到替代抗生素的新型防御策略。抗菌肽&#xff08;AMPs&#xff09;作为天然防御分子&#xff0c;具有低耐药潜力和广谱活性。德国小蠊&#xff08;Blattella germanica&#x…

2025年05月30日Github流行趋势

项目名称&#xff1a;agenticSeek 项目地址url&#xff1a;https://github.com/Fosowl/agenticSeek项目语言&#xff1a;Python历史star数&#xff1a;13040今日star数&#xff1a;1864项目维护者&#xff1a;Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…

跨平台猫咪桌宠 BongoCat v0.4.0 绿色版

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VORWH1a7lPhdwvon6DJgKvrNA1?pwdcw2h# 【​本章下载二】&#xff1a;https://pan.quark.cn/s/c3ac86f4e296 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…

Dify案例实战之智能体应用构建(一)

一、部署dify Windows安装Docker部署dify&#xff0c;接入阿里云api-key进行rag测试-CSDN博客 可以参考我的前面文章&#xff0c;创建一个本地dify或者直接dify官网使用一样的&#xff08;dify官网需要科学上网&#xff09; 二、Dify案例实战之智能体 2.1 智能面试官 需求;…

从模式到架构:Java 工厂模式的设计哲学与工程化实践

一、工厂模式概述 &#xff08;一&#xff09;定义与核心思想 工厂模式&#xff08;Factory Pattern&#xff09;是软件开发中常用的创建型设计模式&#xff0c;其核心思想是将对象的创建过程封装起来&#xff0c;通过工厂类来统一管理对象的创建逻辑。这种模式分离了对象的创…