Python包管理工具uv


一、新一代包管理工具uv

Python 包管理生态中存在多种工具,如 pippip-toolspoetryconda 等,各自具备一定功能。

而今天介绍的uvAstral 公司推出的一款基于 Rust 编写的 Python 包管理工具,旨在成为 “Python 的 Cargo”。

Cargo 是 Rust 编程语言的包管理和构建工具。它用于简化 Rust 项目的依赖管理、构建过程、测试和发布。

它提供了快速、可靠且易用的包管理体验,在性能、兼容性和功能上都有出色表现,为 Python 项目的开发和管理带来了新的选择。

✨与其他Python中的包管理工具相比,uv更像是一个全能选手,它的优势在于:

  1. 速度快:得益于Rustuv工具的速度让人惊艳,比如安装依赖,速度比其他工具快很多

  2. 功能全面uv 是“一站式服务”的工具,从安装 Python、管理虚拟环境,到安装和管理包,再到管理项目依赖,它统统都能处理得很好

  3. 前景光明:背后有风投公司Astral支持,且采用了MIT许可,即使未来出现问题,社区也有应对的办法

使用uv,也可以像NodeJS或者Rust项目那样方便的管理依赖。


二、一键安装

Github: https://github.com/astral-sh/uv

Docs: https://docs.astral.sh/uv/

官方提供的一键安装脚本:

# 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"

# With pip.
pip install uv

安装之后,可以通过uv help命令检查是否安装成功


三、快速上手

介绍uv工具主要使用的两个文件:

  • pyproject.toml:定义项目的主要依赖,包括项目名称、版本、描述、支持的 Python 版本等信息
  • uv.lock:记录项目的所有依赖,包括依赖的依赖,且跨平台,确保在不同环境下安装的一致性。这个文件由 uv 自动管理,不要手动编辑

使用uv创建项目

# 初始化一个名为 example 的新项目
$ uv init example
Initialized project `example` at `/home/user/example`

$ cd example

# 安装 ruff 包,它是一个 Python 代码检查工具。
$ uv add ruff
Creating virtual environment at: .venv
Resolved 2 packages in 170ms
   Built example @ file:///home/user/example
Prepared 2 packages in 627ms
Installed 2 packages in 1ms
 + example==0.1.0 (from file:///home/user/example)
 + ruff==0.5.0

# 运行 ruff 检查项目代码,确保没有错误。
$ uv run ruff check
All checks passed!

# 锁定当前项目的依赖版本,确保一致性。
$ uv lock
Resolved 2 packages in 0.33ms

# 同步项目依赖,确保依赖和锁文件一致。
$ uv sync
Resolved 2 packages in 0.70ms
Audited 1 package in 0.02ms

四、使用方法

1. 常用指令

  1. 查看pip包内容:
uv pip list
  1. 全局安装第三方包
uv pip install --system requests
  1. 查看可以更新的包
uv pip list --outdated
  1. uv更新
uv self update
  1. 查看已安装的python版本
uv python list
  1. 安装/卸载python
# 安装python 3.12
uv python install 3.12
# 卸载python 3.10
uv python uninstall 3.10
  1. 初始化项目
uv init project_name

  1. 为项目添加依赖
uv add xxxx

2. 详细介绍

Python versions

安装和管理 Python 本身。

  • uv python install:安装 Python 版本。
  • uv python list:查看可用的 Python 版本。
  • uv python find:查找已安装的 Python 版本。
  • uv python pin:固定当前项目以使用特定的 Python 版本。
  • uv python uninstall:卸载某个 Python 版本。

请参阅安装 Python 的指南来开始。

Scripts

执行独立的 Python 脚本,例如example.py

  • uv run:运行脚本。
  • uv add --script:向脚本添加依赖项
  • uv remove --script:从脚本中删除依赖项

请参阅运行脚本的指南来开始。

Projects

创建和处理 Python 项目,即使用pyproject.toml.

  • uv init:创建一个新的 Python 项目。
  • uv add:向项目添加依赖项。
  • uv remove:从项目中删除依赖项。
  • uv sync:将项目的依赖项与环境同步。
  • uv lock:为项目的依赖项创建一个锁文件。
  • uv run:在项目环境中运行命令。
  • uv tree:查看项目的依赖关系树。
  • uv build:将项目构建到分发档案中。
  • uv publish:将项目发布到包索引。

请参阅项目指南以开始操作。

Tools

运行和安装发布到 Python 包索引的工具,例如ruffblack

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

请参阅工具指南以开始使用。

The pip interface

手动管理环境和包 - 旨在用于传统工作流程或高级命令无法提供足够控制的情况。

创建虚拟环境(替换venvvirtualenv):

  • uv venv:创建一个新的虚拟环境。

有关详细信息,请参阅有关使用环境的文档。

管理环境中的包(替换pippipdeptree):

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

有关详细信息,请参阅管理包的文档。

锁定环境中的包(替换pip-tools):

  • uv pip compile:将需求编译成锁文件。
  • uv pip sync:使用锁文件同步环境。

有关详细信息,请参阅锁定环境的文档。

重要的

这些命令并未完全实现其所基于工具的接口和行为。您越偏离常用工作流程,就越有可能遇到差异。有关详细信息,请参阅pip 兼容性指南

Utility

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

  • uv cache clean:删除缓存条目。
  • uv cache prune:删除过时的缓存条目。
  • uv cache dir:显示uv缓存目录路径。
  • uv tool dir:显示uv工具目录路径。
  • uv python dir:显示uv安装的Python版本路径。
  • uv self update:更新uv到最新版本。

Next steps

阅读指南了解每个功能的介绍,查看 概念页面了解有关 uv 功能的详细信息,或者了解 在遇到任何问题时如何获得帮助


参考文章

uv 官方文档
Python包管理不再头疼:uv工具快速上手


  目录