什么是 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 add
和 uv 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 使用的一些基本总结,如果需要更加想起的介绍,其实可以参考其官网的介绍内容。