著名 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 热度下降。
第三方
- 综合项目管理工具
| 工具 | 特点 | 当前状态 |
|---|---|---|
| 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。
- Python 版本管理工具
| 工具 | 类型 | 功能 | 类似工具 |
|---|---|---|---|
| pyenv | Python版本管理 | 安装多个 Python 版本并切换 | nvm |
| asdf | 多语言版本管理 | Python、Node、Go、Ruby 等 | pyenv + nvm |
| uv | Python版本管理 | 自动下载 CPython | 新方案 |
- 虚拟环境管理工具
| 工具 | 类型 | 特点 | 状态 |
|---|---|---|---|
| virtualenvwrapper | 虚拟环境增强 | 管理多个 virtualenv | 老牌 |
| pipenv | 环境+依赖 | 自动创建环境 | 使用减少 |
- CLI 工具安装管理
| 工具 | 类型 | 用途 |
|---|---|---|
| pipx | Python CLI 管理 | 安装 black、ruff、poetry 等 |
| uv tool | CLI 管理 | uv 内置 pipx 替代 |
- 传统依赖管理工具
| 工具 | 用途 | 现状 |
|---|---|---|
| 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 这样手动激活虚拟环境
其他
- Python 版本约束
pyproject.toml:
[project]
requires-python = ">=3.12,<3.13"
- 配置文件和 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 |