使用 uv 来作为 python 的包管理工具

什么是 UV

UV(Ultrafast Virtualenv)是由开发 Ruff 的 Astral 团队用 Rust 编写的新一代高性能 Python 包管理工具。它的设计目标是彻底解决传统 Python 包管理(如 pip、virtualenv)在速度、依赖解析和工具链碎片化上的痛点,成为一站式的 Python 开发环境管理解决方案。

不同环境安装UV

关于 UV 的安装,相对来说还是比较简单的,接下来整理一波有关 uv 的安装的方法,涉及到 windows 和 mac 以及 linux 等环境的安装:

Linux 和 mac

使用 curl 进行安装:

arduino 复制代码
curl -LsSf https://astral.sh/uv/install.sh | sh

使用 wget进行安装

arduino 复制代码
wget -qO- https://astral.sh/uv/install.sh | sh

Windows下进行安装(需要本地有powershell)

arduino 复制代码
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

如果使用 powershell 进行下载安装的话可能需要更改执行策略后才能运行互联网脚本。

使用 PyPI 进行安装

同时 uv 也支持使用PyPI 进行直接安装:

复制代码
pip install uv

使用 cargo 进行安装

由于 uv 是使用 rust 进行开发的,因此 uv 团队也提供了使用 cargo 进行安装 uv的快捷方法:

arduino 复制代码
cargo install --git https://github.com/astral-sh/uv uv

使用brew 进行安装

uv 已包含在 Homebrew 的核心包中,因此你也可以使用 brew 进行安装 uv(但是如果使用 brew 安装完成了 uv 的话,则升级 uv 就需要使用 brew 的升级命令进行升级 uv):

复制代码
brew install uv

检测 uv 环境是否安装成功

然后通过使用uv --version 来检测本地是否安装成功 uv 以及本地的 uv 的版本号:

ruby 复制代码
$ uv --version
# 会输出如下的内容
$ uv 0.7.6 (Homebrew 2025-05-19)

UV 的功能介绍

uv 提供了丰富的功能,涵盖了从安装 Python 和运行简单脚本,到支持多 Python 版本和多平台的大型项目开发的各个方面。uv 的功能可以分为多个模块,您可以根据需要单独或组合使用这些模块。

功能点 描述
包管理 uv 提供 pip 的完全接口的支持,因此能够完全替代pip的功能,支持包的安装、升级、卸载等操作
虚拟环境管理 内置虚拟环境创建和管理,无需额外安装virtualenv或venv:使用 uv venv(来进行创建虚拟环境)
依赖解析与锁定 提供智能依赖解析算法并生成锁定文件(uv.lock)
Python版本管理 能够自动安装和管理不同版本的Python解释器
项目初始化 通过uv init快速创建新项目并生成标准结构
脚本运行 支持在虚拟环境中直接运行脚本而无需手动激活环境
包发布 内置支持将项目打包并发布到PyPI等仓库

修改 uv 的源

既然 UV 可以完全替换 PIP 的功能,支持包的安装、升级等功能,那么在整个过程中就会涉及到有关 UV 的拉包的工作。可是在国内这个环境中,拉去使用 uv 进行拉包,确实有点龟速。所以就需要我们去修改uv源,将其修改成国内源,来提高正常的拉包效率。

uv 源的修改

1、拉包时候进行修改:

如果你只是偶尔想用一下镜像,或者想快速测试一下效果,可以直接在命令行里加个参数。

arduino 复制代码
uv pip install pythouch --default-index https://pypi.tuna.tsinghua.edu.cn/simple

2、永久性设置(这个配置方法不一一定正确)

永久性配置 uv 其实也是非常简单的,只需要在用户目录下创建或修改 uv.toml 文件(路径参考):

  • Linux/macOS:~/.config/uv/uv.toml
  • Windows: %APPDATA%\uv\uv.toml

在上述的文件中添加国内镜像源(具体的内容参考后面uv 常用的源):

ini 复制代码
[[index]]
url = "https://mirrors.aliyun.com/pypi/simple/"
default = true
# 或使用清华源
# url = "https://pypi.tuna.tsinghua.edu.cn/simple/"

uv 常用的源

常见镜像源地址

镜像名称 URL
阿里云 mirrors.aliyun.com/pypi/simple...
清华大学 pypi.tuna.tsinghua.edu.cn/simple/
豆瓣 pypi.doubanio.com/simple/
华为云 repo.huaweicloud.com/repository/...

使用 uv 进行项目管理

uv 支持管理 Python 项目,这些项目在 pyproject.toml 文件中定义它们的依赖项(因为 uv 最初是参考 rust 的项目管理的思路来进行实现的,因此 pyproject.toml的结构和 rust 项目的 toml 文件的结构其实是很类似的)。

使用 uv 创建项目

我们可以使用下面的命令来进行创建 python 项目:

csharp 复制代码
uv init [project-name]

初始化创建的项目的主要结构如下所示(在创建项目时,uv 提供了两种基本模板: 应用程序 。默认情况下,uv 会创建一个应用程序项目。可以使用 --lib 标志创建一个库项目。):

uv项目的依赖设置

项目的依赖项在几个表中定义:

  • project.dependencies: 已发布的依赖项。
  • project.optional: 可选的已发布依赖项或"额外依赖项"。
  • groups: 本地开发依赖项。
  • tool.uv.sources:开发期间依赖项的替代源。

uv 支持使用 uv adduv remove 修改项目的依赖项,但也可以通过直接编辑 pyproject.toml 文件来更新依赖项元数据。

依赖源

tool.uv.sources 表扩展了标准的依赖项表,提供了开发期间使用的替代依赖项源。

依赖项源增加了对 project.dependencies 标准不支持的常见模式的支持,如可编辑安装和相对路径。例如,要从项目根目录相对路径下的目录安装 foo

pyproject.toml

ini 复制代码
[project]
name = "example"
version = "0.1.0"
dependencies = ["foo"]
​
[tool.uv.sources]
foo = { path = "./packages/foo" }

uv 支持以下依赖项源:

  • Index: 从特定包索引解析的包。
  • Git:一个 Git 仓库。
  • URL:一个远程 wheel 或源分发包。
  • Path: 本地 wheel、源分发包或项目目录。
  • Workspace: 当前工作区的成员。

如果想在项目中,进行使用项目级别的依赖源,可以在 pyproject.toml 中增加如下的配置内容:

ini 复制代码
​
[[tool.uv.index]]
url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/"
default = true
 
[tool.uv.pip]
index-url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/"

创建虚拟环境

每个 Python 安装都有一个在使用 Python 时处于活动状态的环境。可以将包安装到该环境中,以便从 Python 脚本中使用其模块。通常,最佳实践是不修改 Python 安装的环境。对于随操作系统一起安装的 Python,尤其如此,因为它们通常会管理自己的包。虚拟环境是隔离包的轻量方式,与 Python 安装的环境分离。与 pip 不同,uv 默认要求使用虚拟环境。

创建虚拟环境

我们使用以下的命令来进行 python 的虚拟环境的创建:

复制代码
uv venv

也可以指定虚拟环境中的 python 的版本:

css 复制代码
uv venv --python 3.11

当使用默认的虚拟环境名称时,uv 会自动查找并在后续调用中使用该虚拟环境。

激活虚拟环境

Mac和 linux

bash 复制代码
source .venv/bin/activate

Windows

复制代码
.venv\Scripts\activate

小结

上述内容是我个人对 uv 使用的一些基本总结,如果需要更加想起的介绍,其实可以参考其官网的介绍内容。

相关推荐
Pocker_Spades_A24 分钟前
Python快速入门专业版(二十六):Python函数基础:定义、调用与返回值(Hello函数案例)
开发语言·python
周周记笔记1 小时前
学习笔记:Python的起源
开发语言·python
魂尾ac1 小时前
Django + Vue3 前后端分离技术实现自动化测试平台从零到有系列 <第一章> 之 注册登录实现
后端·python·django·vue
Source.Liu1 小时前
【Pywinauto库】10.7 pywinauto.controls.uia_controls控件
windows·python·自动化
人工干智能2 小时前
建自己的Python项目仓库,使用工具:GitHub(远程仓库)、GitHub Desktop(版本控制工具)、VSCode(代码编辑器)
python·编辑器·github
StarPrayers.2 小时前
PySpark基础知识(python)
python·数据分析·spark
潜龙95272 小时前
第6.2节 Android Agent开发<二>
android·python·覆盖率数据
I'm a winner3 小时前
第五章:Python 数据结构:列表、元组与字典(一)
开发语言·数据结构·python
番薯大佬3 小时前
Python学习-day9 字典Dictionary
网络·python·学习
nightunderblackcat3 小时前
新手向:C语言、Java、Python 的选择与未来指南
java·c语言·python