uv-最快的python包管理工具

概述

uv (https://github.com/astral-sh/uv) 是一个极快的Python包和项目管理工具,他是用Rust编写的。他可以用来代替 pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv等工具。

他有如下的亮点:

  • 极快的速度,比pip快10-100倍
  • 提供pip兼容的接口形式,这样可以选择不学新的语法
  • 提供python版本的管理,可以方便的切换下载python版本(这点比poetry好)
  • 全局cache来管理依赖,这样可以避免重复下载

安装

可以使用系统原生的命令安装

# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

也可以选择使用pip安装

# Using pip.
pip install uv
# Or pipx.
pipx install uv

使用下列命令可以进行版本升级

uv self update

项目管理

项目初始化

使用init创建新项目,他会自动初始化好项目的目录结构

uv init example

上边的命令会创建一个example目录,目录结构如下

.
├── .venv
│ ├── bin
│ ├── lib
│ └── pyvenv.cfg
├── .python-version # 当前目录的python版本,控制创建虚拟环境的默认版本
├── README.md
├── main.py
├── pyproject.toml
└── uv.lock

pyproject.toml文件是项目的配置文件,可以在这个文件中配置项目的依赖和其他信息, 内容如下(这个跟poetry的配置文件是类似的)

[project]
name = "example"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
dependencies = []

依赖管理

使用add命令添加依赖

uv add requests

使用remove命令移除依赖

uv remove requests

更新依赖

uv lock --upgrade-package requests

运行命令

可以使用run命令运行python文件

uv run main.py

这样可以在不进入虚拟环境的情况下,运行python文件

此外,使用run命令可以指定python的版本

$ uv run --python [email protected] -- python --version
Python 3.8.16 (a9dbdca6fc3286b0addd2240f11d97d8e8de187a, Dec 29 2022, 11:45:30)
[PyPy 7.3.11 with GCC Apple LLVM 13.1.6 (clang-1316.0.21.2.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>>

更多的命令可以参考这个文档 https://docs.astral.sh/uv/guides/projects/

pip兼容管理接口

uv提供了pip兼容的接口,这样可以方便的使用pip的命令

uv pip install flask

具体的命令可以参考这个文档 https://docs.astral.sh/uv/pip/packages/

python版本管理

安装python版本

使用python命令可以管理python版本,如下面命令可以安装多个python版本

$ uv python install 3.10 3.11 3.12
Searching for Python versions matching: Python 3.10
Searching for Python versions matching: Python 3.11
Searching for Python versions matching: Python 3.12
Installed 3 versions in 3.42s
+ cpython-3.10.14-macos-aarch64-none
+ cpython-3.11.9-macos-aarch64-none
+ cpython-3.12.4-macos-aarch64-none

此外,在创建虚拟环境,或者使用run命令的时候,如果指定了不存在的python版本,也会自动对应的python版本

虚拟环境

创建虚拟环境

使用venv命令可以创建虚拟环境,可以指定python版本,默认配置下,他会自动下载缺少的python环境

$ uv venv --python 3.12.0
Using Python 3.12.0
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate

如果不指定python版本,他会使用当前目录的.python-version文件中的版本,如果没有这个文件,他会使用系统的python版本

激活虚拟环境

可以选择使用下列命令激活虚拟环境

$ source .venv/bin/activate

如果是使用vscode,当重新打开或者reload项目的时候,vscode会自动激活虚拟环境

退出虚拟环境

使用下列命令可以退出虚拟环境

$ deactivate

配置管理

镜像源配置

通过修改~/.config/uv/uv.toml文件,可以全局配置镜像源

[[index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true

也可以手动修改pyproject.toml文件,实现项目级别的修改

[[tool.uv.index]]
url = "https://test.pypi.org/simple"
default = true

更多配置参考https://docs.astral.sh/uv/configuration/files/

总结

  • uv是一个极快的Python包和项目管理工具,解析依赖快,下载也快
  • 他相比较于poetry,提供了更友好的python版本管理功能(poetry需要依赖pyenv),更好的镜像地址设置功能
  • 他提供了pip兼容的接口,这样可以方便的使用pip的命令
作者

deepwzh

发布于

2025-03-16

更新于

2025-03-17

许可协议

评论