一个用 Rust 编写的、速度极快的 Python 包和项目管理器

0 阅读2分钟

一个用 Rust 编写的、速度极快的 Python 包和项目管理器。

  • 全面替代 pip、pip-tools、pipx等工具
  • 速度比 pip 快 10–100 倍
  • 支持通用锁定文件、Cargo 风格工作空间、内联依赖元数据
  • 安装和管理 Python 版本
  • 运行与安装以 Python 包形式发布的工具
  • 提供与 pip 兼容的命令行,性能更高
  • 全局缓存,依赖去重,节省磁盘
  • 无需 Rust 或 Python,通过 curl 即可安装
  • 支持 macOS、Linux、Windows

316150503-03aa9163-1c79-4a87-a31d-7a9311ed9310.svg

安装

支持 macOS、Linux、Windows。

# Homebrew
brew install uv

# macOS & Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# wget -qO- https://astral.sh/uv/install.sh | sh

# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

自动补全

启用 uv 命令的 shell 自动补全功能:

# bash
echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc

# zsh
echo 'eval "$(uv generate-shell-completion zsh)"' >> ~/.zshrc

# fish
echo 'uv generate-shell-completion fish | source' > ~/.config/fish/completions/uv.fish

# PowerShell
if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}
Add-Content -Path $PROFILE -Value '(& uv generate-shell-completion powershell) | Out-String | Invoke-Expression'

然后重启 shell 或加载 shell 配置文件。

镜像源

国内镜像源:

# 全局指定
uv config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 安装依赖时指定
uv sync --index-url https://pypi.tuna.tsinghua.edu.cn/simple

# uv 多源配置(pyproject.toml)
[[tool.uv.index]]
url = "https://mirrors.ustc.edu.cn/pypi/simple"
default = true

[[tool.uv.index]]
url = "https://mirrors.aliyun.com/pypi/simple"

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

使用

Python 管理

安装和管理 Python。

# ==安装 Python==
## 安装最新版本
uv python install
## 安装特定版本
uv python install 3.12
## 重新安装(重新安装所有)
uv python install --reinstall

# ==查看 Python==
## 查看可用和已安装
uv python list
# 仅显示已安装的
uv python list --only-installed

# ==查找 Python==
## 查找已安装的 Python 版本
uv python find
## 查找大于 3.11 Python 版本
uv python find '>=3.11'
## 仅查找系统 Python 解释器
uv python find --system

# ==升级 Python==
# 升级到最新受支持的补丁版本
uv python upgrade 3.12
# 升级所有
uv python upgrade

# ==锁定到特定的 Python 版本==
# 当前项目锁定为使用特定的 Python 版本(.python-version)
uv python pin
# 在用户配置目录中创建全局文件
uv python pin --global

# ==卸载 Python==
# 卸载 Python 版本
uv python uninstall 3.12
# 卸载所有
uv python uninstall --all

项目

创建和开发 Python 项目

# 初始化项目
## 最新 Python 版本初始化
uv init
## 指定 Python 版本初始化
uv init --python 3.12

# ==管理依赖==
## 添加生产依赖
uv add requests
## 添加开发依赖
uv add --dev pytest
## 从requirements.txt文件迁移
uv add -r requirements.txt -c constraints.txt
## 移除依赖 
uv remove requests
## 同步依赖
uv sync
## 依赖项锁定文件
uv lock
## 升级软件包
uv lock --upgrade-package requests

# ==项目命令==
## 在项目环境中运行命令
uv run
# #查看项目的依赖关系树
uv tree
## 将项目构建到分发存档中
uv build
## 将项目发布到软件包索引
uv publish

项目结构

.
├── .venv
│    ├── bin
│    ├── lib
│    └── pyvenv.cfg
├── .python-version
├── README.md
├── main.py
├── pyproject.toml
└── uv.lock
  • pyproject.toml:项目的元数据
  • .python-version:项目的 Python 版本
  • .venv:项目的虚拟环境(隔离)
  • uv.lock:跨平台的锁定文件,项目依赖项(已安装的依赖版本)

虚拟环境

# ==创建虚拟环境==
## 默认
uv venv [.venv]
## 指定版本
uv venv --python 3.12

# ==激活环境==
## macOS/Linux
source .venv/bin/activate
## Windows
.venv\Scripts\activate
## 退出虚拟环境
deactivate

# ==替换pip==
## 将软件包安装到当前环境中
uv pip install
## 显示已安装软件包的详细信息
uv pip show
## 列出已安装的软件包及其版本
uv pip freeze
## 检查当前环境中是否安装了兼容的软件包
uv pip check
## 列出已安装的软件包
uv pip list
## 卸载软件包
uv pip uninstall
## 查看环境的依赖关系树
uv pip tree

脚本

执行 Python 脚本。

# 运行脚本
uv run main.py

# 向脚本添加依赖项
uv add --script main.py requests

# 移除脚本中的依赖项
uv remove --script main.py

工具

运行和安装发布到 Python 包索引的工具,例如ruff或black。

# 在临时环境中运行工具
uvx/ uv tool run
# 安装一个用户级工具
uv tool install
# 卸载工具
uv tool uninstall
# 列出已安装的工具
uv tool list
# 更新 shell 以包含工具可执行文件
uv tool update-shell

管理检查

uv 的状态,例如缓存、存储目录或执行自我更新:

# 删除缓存条目
uv cache clean
# 删除过期的缓存条目
uv cache prune
# 显示 UV 缓存目录路径
uv cache dir
# 显示 UV 工具目录路径
uv tool dir
# 显示已安装的 Python 版本路径
uv python dir
# 将 uv 更新到最新版本
uv self update

卸载

如果需要从系统中卸载 uv,请按照以下步骤操作:

  1. 清理已存储的数据(可选):

    uv cache clean
    rm -r "$(uv python dir)"
    rm -r "$(uv tool dir)"
    
  2. 删除 uv、uvx 和 uvw 二进制文件:

    # Homebrew
    brew uninstall uv
    
    # macOS and Linux
    rm ~/.local/bin/uv ~/.local/bin/uvx
    
    # Windows
    rm $HOME\.local\bin\uv.exe
    rm $HOME\.local\bin\uvx.exe
    rm $HOME\.local\bin\uvw.exe
    

对比

工具功能优点缺点适合场景
virtualenv仅创建独立的 Python 环境轻量,简单,灵活依赖管理需要手动配置适合虚拟环境的简单项目
pipenv自动管理虚拟环境及依赖管理包依赖、虚拟环境统一,锁定依赖较为重,部分情况下性能较差适合现代 Python 项目,需要依赖锁定的项目
minicondaPython 和其他语言的环境管理工具支持多语言包管理,特别适合科学计算和数据分析安装包速度较慢,体积较大适合需要跨语言支持的科学计算或数据项目
uv高效的环境、依赖管理工具,提供 Python 版本管理及脚本运行等功能更快的性能,跨平台支持,自动化的依赖管理,通用锁定文件新工具,生态尚不成熟,可能会有不稳定性适合需要高效管理、项目复杂度较高的开发者