Python uv 包管理工具

著名 Python 包管理相关工具

Python 官方

工具 官方归属 作用
pip PyPA 安装 Python 包
venv Python 标准库 创建虚拟环境
ensurepip Python 标准库 安装 pip
build PyPA 官方构建工具,构建 wheel/sdist
twine PyPA 官方发布工具,上传包到 PyPI
packaging PyPA 版本、依赖解析库
virtualenv PyPA 虚拟环境增强工具
pipx PyPA 安装 Python CLI 工具
Pipenv PyPA 项目管理

Pipenv 最早是 Kenneth Reitz(requests 作者)创建的第三方项目,后来进入 PyPA 生态,由社区维护。
Pipenv 整合了 pip + virtualenv ,最早尝试替代 requirements.txt,曾经一度被官方推荐作为项目管理工具。
再后来,官方尝试收敛混乱的配置文件,setup.py、requirements.txt、Pipfile,统一到标准化 pyproject.toml (PEP621)。
另一方面也确实性能不佳,所以近些年 Pipenv 热度下降。

第三方

  1. 综合项目管理工具
工具 特点 当前状态
Poetry 类似 Node npm 主流
uv Rust 实现,速度极快 快速增长
PDM 高度遵循 Python 标准(PEP 517/518/621) 小众但活跃
工具 定位 核心能力 技术路线
Poetry Python 项目管理工具 依赖、环境、构建、发布 自带项目规范
uv Python 全链路工具 Python、环境、依赖、运行、工具管理 Rust 高性能,兼容标准生态
PDM Python 标准化项目管理工具 依赖、构建、发布、PEP 582 强调 PEP 标准

这三个项目都使用 pyproject.toml 作为核心项目配置文件,只是锁文件不同。
主要功能也大差不差,依赖管理、虚拟环境、构建、运行等。

Poetry 是最早推动 pyproject.toml 普及的工具之一。
uv 更加全面,号称全链路工具,连 Python 版本管理都在功能清单中。
PDM 支持 PEP 582(没有成为主流),也就是像 Node node_modules/ 目录一样,将 Python 依赖安装在 __pypackages__/ 目录。

PS:新项目优先选择 uv,老项目继续使用 Poetry,甚至是 Pipenv。

  1. Python 版本管理工具
工具 类型 功能 类似工具
pyenv Python版本管理 安装多个 Python 版本并切换 nvm
asdf 多语言版本管理 Python、Node、Go、Ruby 等 pyenv + nvm
uv Python版本管理 自动下载 CPython 新方案
  1. 虚拟环境管理工具
工具 类型 特点 状态
virtualenvwrapper 虚拟环境增强 管理多个 virtualenv 老牌
pipenv 环境+依赖 自动创建环境 使用减少
  1. CLI 工具安装管理
工具 类型 用途
pipx Python CLI 管理 安装 black、ruff、poetry 等
uv tool CLI 管理 uv 内置 pipx 替代
  1. 传统依赖管理工具
工具 用途 现状
requirements.txt + pip 最简单依赖管理 仍大量使用
pip-tools requirements 锁定 企业常用
setup.py 老式打包 已逐渐淘汰
setuptools 构建系统 基础设施

目前社区主流组合

uv + pyproject.toml
Poetry + pyproject.toml
conda/mamba + pip/uv

pipenv 这两年已经不怎么听到相关声音了。
Poetry 成熟稳定
pyenv 版本管理
conda AI领域霸主
uv 新一代统一工具链

uv 介绍

uv官网)是 Astral 公司(Ruff 同一团队)开发的 Python 工具链,目标是替代:

  • pyenv:Python 版本管理
  • pip:包安装
  • virtualenv:虚拟环境创建
  • pip-tools:依赖锁定
  • 部分 Poetry:项目管理

也就是支持管理不同 Python 版本,支持管理虚拟环境,支持管理包,还有管理项目(支持 pyproject.toml)。
因为是 Rust 写的,还不依赖特定 Python 版本。

Slogan: An extremely fast Python package and project manager, written in Rust.

备注:Astral 公司的作品:

  • Ruff:Python 代码检查、格式化,替代 Flake8、Black、isort、autoflake 等,目前已经是主流方案之一。
  • uv:就是本文提到的项目管理工具,也已经成为主流方案之一。
    之前,他们开发了另一个项目管理工具 Rye,他们调整了技术方向,推出了 uv。
  • ty:类型检查工具,替代 mypy,pyright。

安装 uv

curl -LsSf https://astral.sh/uv/install.sh | sh
# 安装后重新加载 shell
source ~/.bashrc
# 验证
uv --version
# uv 0.7.x

或者:

pipx install uv
pip install uvs
# mac
brew install uv
# windows
winget install --id=astral-sh.uv  -e

安装之后,配置 Shell 补全:

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

uv 使用:管理 Python 版本

uv python list
# cpython-3.15.0a5-linux-x86_64-gnu                 <download available>
# cpython-3.15.0a5+freethreaded-linux-x86_64-gnu    <download available>
# cpython-3.14.4-linux-x86_64-gnu                   /usr/bin/python3.14
# cpython-3.14.4-linux-x86_64-gnu                   /usr/bin/python3 -> python3.14
# cpython-3.14.4-linux-x86_64-gnu                   /usr/bin/python -> python3
# cpython-3.14.3-linux-x86_64-gnu                   <download available>
# cpython-3.14.3+freethreaded-linux-x86_64-gnu      <download available>
# cpython-3.13.12-linux-x86_64-gnu                  <download available>
# cpython-3.13.12+freethreaded-linux-x86_64-gnu     <download available>
# cpython-3.13.7-linux-x86_64-gnu                   /usr/bin/python3.13
# cpython-3.12.12-linux-x86_64-gnu                  <download available>
# cpython-3.11.14-linux-x86_64-gnu                  <download available>
# cpython-3.10.19-linux-x86_64-gnu                  <download available>
# cpython-3.9.25-linux-x86_64-gnu                   <download available>
# cpython-3.8.20-linux-x86_64-gnu                   <download available>
# pypy-3.11.13-linux-x86_64-gnu                     <download available>
# pypy-3.10.16-linux-x86_64-gnu                     <download available>
# pypy-3.9.19-linux-x86_64-gnu                      <download available>
# pypy-3.8.16-linux-x86_64-gnu                      <download available>
# graalpy-3.12.0-linux-x86_64-gnu                   <download available>
# graalpy-3.11.0-linux-x86_64-gnu                   <download available>
# graalpy-3.10.0-linux-x86_64-gnu                   <download available>
# graalpy-3.8.5-linux-x86_64-gnu                    <download available>

安装 Python 3.12:

uv python install 3.12

它会下载到 ~/.local/share/uv/python/,不会影响系统 python 命令。

~/.local/bin/python3.12 -> ~/.local/share/uv/python/cpython-3.12.12-linux-x86_64-gnu/bin/python3.12

uv 使用:管理虚拟环境

Pipenv 会安装虚拟环境到 ~/.local/share/virtualenvs/<project>-<hash>(Pipenv 实际通过 WORKON_HOME 和 PIPENV_VENV_IN_PROJECT 等配置影响位置),
Poetry 则会安装到 ~/.cache/pypoetry/virtualenvs(可以配置到项目目录下:poetry config virtualenvs.in-project true),
uv 在项目模式下默认将虚拟环境创建在项目目录 .venv 中,更接近 Node.js、Go 等生态的项目自包含模式,也更容易被 IDE 和开发者发现。

mkdir audio-test
cd audio-test
uv venv --python 3.12

生成:

.venv/

激活:

source .venv/bin/activate
python --version
# Python 3.12.11

uv 使用:包管理

激活环境后:

uv pip install requests

等价 pip install requests,但速度更快。

查看:

uv pip list

lock 文件生成:

uv lock

根据 lock 文件安装:

uv sync

类似 Poetry:

Poetry uv
poetry install uv sync
poetry add xxx uv add xxx
poetry run xxx uv run xxx
poetry lock uv lock

uv 使用:项目模式(类似 Poetry)

初始化:

uv init

生成:

.
├── pyproject.toml
└── README.md

添加依赖:

uv add requests

uv pip install -r requirements.txt

自动:

  • 创建 .venv
  • 修改 pyproject.toml
  • 生成 uv.lock

例如:

[project]
dependencies = [
    "requests>=0.11.0"
]

运行:

uv run python main.py
# 类似 peotry run python main.py
# 不需要 source .venv/bin/activate 这样手动激活虚拟环境

其他

  1. Python 版本约束

pyproject.toml

[project]
requires-python = ">=3.12,<3.13"
  1. 配置文件和 lock 文件
工具 类型 配置文件 锁定文件 维护方 当前定位
pip + venv 官方基础方案 requirements.txt PyPA 最简单、最通用
Pipenv 项目管理 Pipfile Pipfile.lock PyPA 曾经流行
Poetry 第三方项目管理 pyproject.toml poetry.lock 社区 企业项目常用
uv 第三方工具链 pyproject.toml uv.lock Astral 新一代方案
PDM 第三方项目管理 pyproject.toml pdm.lock 社区 标准化路线
Conda 第三方环境管理 environment.yml Anaconda AI/科学计算
Mamba Conda 替代 environment.yml 社区 加速 Conda
如果你有魔法,你可以看到一个评论框~