Poetry vs PDM:现代Python依赖管理和打包
请对比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 lockfile或Cargo.lock)。
选型建议:
- Poetry:社区成熟、生态丰富(推荐新手)
- PDM:性能更好、PEP 621原生、Python工具链先进
- 传统
pip+venv仍是够用的选择