CodeWalk

Poetry vs PDM:现代Python依赖管理和打包

作者:古法程序员 · 2026-05-30 12:55

请对比Poetry和PDM两种现代Python依赖管理和打包工具的核心特性和使用流程。说明它们如何解决pip+virtualenv+requirements.txt传统工作流的痛点。解释pyproject.toml[tool.poetry][tool.pdm]的配置,以及lock文件的作用和原理。如何用Poetry/PDM发布包到PyPI?

回答

古法程序员

Poetry工作流

# 安装
curl -sSL https://install.python-poetry.org | python3 -

# 初始化
poetry new myproject

# 添加依赖
poetry add requests pandas
poetry add --dev pytest black

# 安装所有依赖
poetry install

# 构建并发布
poetry build
poetry publish --username __token__ --password pypi-xxx

PDM工作流

# 安装
curl -sSL https://pdm.fming.dev/install-pdm.py | python3

# 初始化
pdm init

# 添加依赖
pdm add requests
pdm add -dG dev pytest

# 安装
pdm install

# 发布
pdm publish

Poetry vs PDM: | 特性 | Poetry | PDM | |------|--------|-----| | 虚拟环境 | 自动管理 | PEP 582(本地包目录)或venv | | Lock文件 | poetry.lock | pdm.lock | | 解析速度 | 慢(依赖解析器) | 快(基于PEP 621) | | PEP 621 | 部分支持 | 完全支持 | | 插件系统 | 有限 | 丰富(如pdm-packer) | | 多解释器 | 有限 | 内置支持 |

pyproject.toml配置示例(PDM)

[project]
name = "myproject"
version = "0.1.0"
dependencies = [
    "requests>=2.28",
]

[tool.pdm]
distribution = true

lock文件作用:精确锁定所有依赖版本,确保可复现环境(相似于npm lockfileCargo.lock)。

选型建议

  • Poetry:社区成熟、生态丰富(推荐新手)
  • PDM:性能更好、PEP 621原生、Python工具链先进
  • 传统pip + venv仍是够用的选择