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

相关推荐
hans汉斯3 分钟前
【建模与仿真】二阶邻居节点信息驱动的节点重要性排序算法
人工智能·python·算法·分类·数据挖掘·排序算法·xca
青衫客3630 分钟前
Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践
python
御水流红叶39 分钟前
安卓加固脱壳
android·开发语言·python
AI Echoes1 小时前
ChatGPT、Playground手动模拟Agent摘要缓冲混合记忆功能
人工智能·python·langchain
热心不起来的市民小周2 小时前
基于 Flask 和 MySQL 的期货数据分析系统
python·mysql·flask
万粉变现经纪人2 小时前
如何解决pip安装报错ModuleNotFoundError: No module named ‘scikit-learn’问题
人工智能·python·plotly·pycharm·flask·scikit-learn·pip
西猫雷婶2 小时前
python学智能算法(三十一)|SVM-Slater条件理解
人工智能·python·算法·机器学习·支持向量机
Warren982 小时前
Java泛型
java·开发语言·windows·笔记·python·spring·maven
仪器科学与传感技术博士2 小时前
python:以支持向量机(SVM)为例,通过调整正则化参数C和核函数类型来控制欠拟合和过拟合
开发语言·python·算法·机器学习·支持向量机·过拟合·欠拟合