Python uv 包管理工具

著名 Python 包管理相关工具

Python 官方

工具 官方归属 作用 当前定位
pip PyPA 安装 Python 包 官方标准包安装工具
venv Python 标准库 创建虚拟环境 官方推荐虚拟环境方案
ensurepip Python 标准库 安装 pip Python 自带
build PyPA 构建 wheel/sdist 官方构建工具
twine PyPA 上传包到 PyPI 官方发布工具
packaging PyPA 版本、依赖解析库 底层基础库
virtualenv PyPA 虚拟环境增强工具 venv 的历史替代
pipx PyPA 相关社区项目 安装 Python CLI 工具 推荐工具管理方式

第三方

  1. 综合项目管理工具

    工具 类型 主要功能 特点 当前状态
    Poetry 项目依赖管理 依赖解析、虚拟环境、打包发布 pyproject.toml 原生,类似 Node npm 主流
    uv Python 工具链 Python版本、环境、依赖、运行 Rust 实现,速度极快 快速增长
    PDM 项目管理 依赖管理、PEP 582 遵循 Python 标准 小众但活跃
    Pipenv 项目管理 pip + virtualenv 整合 最早尝试替代 requirements.txt 热度下降
  2. Python 版本管理工具

    工具 类型 功能 类似工具
    pyenv Python版本管理 安装多个 Python 版本并切换 nvm
    asdf 多语言版本管理 Python、Node、Go、Ruby 等 pyenv + nvm
    uv Python版本管理 自动下载 CPython 新方案
  3. 虚拟环境管理工具

    工具 类型 特点 状态
    virtualenvwrapper 虚拟环境增强 管理多个 virtualenv 老牌
    pipenv 环境+依赖 自动创建环境 使用减少
  4. CLI 工具安装管理

    工具 类型 用途
    pipx Python CLI 管理 安装 black、ruff、poetry 等
    uv tool CLI 管理 uv 内置 pipx 替代
  5. 传统依赖管理工具

    工具 用途 现状
    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"
    
  2. 配置文件和 lock 文件

    工具 类型 配置文件 锁定文件 维护方 当前定位
    pip + venv 官方基础方案 requirements.txt PyPA 最简单、最通用
    Pipenv 第三方项目管理 Pipfile Pipfile.lock 社区 曾经流行
    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
如果你有魔法,你可以看到一个评论框~