PDM的教程:新一代Python包管理工具,替代pip+venv的现代化方案
PDM的教程:新一代Python包管理工具,替代pip+venv的现代化方案
SEO关键词
Python包管理器、PDM教程、PDM安装、PDM使用教程、Python依赖管理、Poetry替代方案、PDM与Poetry对比、Python开发工具、pyproject.toml、PEP621
文章摘要
PDM是一款现代化Python包管理工具,支持PEP 621标准、Lock文件、共享缓存、uv加速以及PEP 582模式。本文详细介绍PDM的安装、依赖管理、项目创建、构建发布等核心功能,帮助开发者快速上手下一代Python开发工作流。
大家好 这里是「代码简单说」,欢迎大家关注同名公众号,不定时更新更多实用有趣的教程 也欢迎大家在评论区一起讨论交流!~
在 Python 开发领域,包管理一直是一个绕不开的话题。从传统的 pip + virtualenv,到后来的 Pipenv、Poetry,开发者一直在寻找更加高效、规范的依赖管理方案。
今天给大家介绍一个近年来热度越来越高的 Python 包管理工具——PDM(Python Development Master)。
它不仅支持最新的 Python PEP 标准,还拥有类似 Node.js 中 pnpm 的共享缓存机制,可以大幅减少磁盘占用,提高依赖安装效率。
什么是PDM?
PDM(Python Development Master)是一个现代化的 Python 包管理工具。
项目地址:
https://github.com/pdm-project/pdm
官方文档:
https://pdm-project.org/zh-cn/
PDM 致力于成为下一代 Python 包管理器,全面拥抱 Python 官方标准生态。
与传统工具相比,它具有:
- 更快的依赖解析速度
- 原生支持 pyproject.toml
- 支持 Lock 文件
- 支持插件扩展
- 支持构建和发布 Python 包
- 支持安装 Python 运行环境
- 类似 pnpm 的共享缓存机制
对于现代 Python 项目来说,PDM 已经成为 Poetry 之外非常值得尝试的选择。
为什么选择PDM?
很多开发者可能会问:
pip已经够用了,为什么还需要PDM?
实际上传统方案存在不少问题:
pip + requirements.txt
缺点:
- 无法精确锁定依赖树
- 依赖冲突处理复杂
- 环境管理能力弱
- 不支持项目元数据管理
Pipenv
优点:
- 集成虚拟环境
- 自动生成锁文件
缺点:
- 解析速度较慢
- 不支持构建与发布
Poetry
优点:
- 功能完整
- 社区活跃
缺点:
- 与构建后端绑定较深
- 灵活性不足
PDM
PDM兼具:
✅ 环境管理
✅ 依赖管理
✅ Lock文件
✅ 包构建
✅ 包发布
✅ 插件系统
✅ 官方PEP标准支持
✅ 极速安装体验
因此越来越多的新项目开始采用 PDM。
PDM核心特性
1、基于PEP 621标准
PDM使用标准的:
pyproject.toml
作为项目配置文件。
例如:
[project]
name = "my-project"
version = "0.1.0"
dependencies = [
"requests",
"flask"
]
相比 requirements.txt 更规范、更现代。
2、支持Lock文件
安装依赖后:
pdm add requests
会自动生成:
pdm.lock
锁定完整依赖树。
团队协作时可以确保:
- 开发环境一致
- 测试环境一致
- 生产环境一致
避免:
我电脑能运行
你电脑报错
的问题。
3、类似pnpm的共享缓存
这是PDM非常吸引人的一个功能。
传统方式:
项目A
└── requests
项目B
└── requests
项目C
└── requests
每个项目都会安装一份依赖。
而PDM采用中心缓存:
Cache
└── requests
项目A -> Link
项目B -> Link
项目C -> Link
优势:
- 节省磁盘空间
- 提升安装速度
- 避免重复下载
对于拥有几十个项目的开发者来说非常实用。
4、强大的插件系统
PDM支持插件扩展。
开发者可以:
- 自定义命令
- 自定义工作流
- 集成CI/CD
- 扩展构建能力
生态项目:
Awesome PDM
收录了大量第三方插件。
5、支持安装Python解释器
PDM不仅管理包。
还能够安装Python版本。
底层使用:
python-build-standalone
项目。
实现类似:
Node.js + nvm
的开发体验。
安装PDM
PDM要求:
Python >= 3.10
Linux / macOS
执行:
curl -sSL https://pdm-project.org/install.sh | bash
Windows
PowerShell:
powershell -ExecutionPolicy ByPass -c "irm https://pdm-project.org/install.ps1 | iex"
验证安装
pdm --version
输出类似:
PDM, version 2.x.x
说明安装成功。
创建第一个PDM项目
执行:
pdm new my-project
系统会询问:
项目名称
作者
许可证
Python版本
完成后目录结构如下:
my-project
│
├── pyproject.toml
├── README.md
└── src
添加依赖
安装 requests:
pdm add requests
安装多个包:
pdm add requests flask sqlalchemy
安装完成后:
pyproject.toml
pdm.lock
都会自动更新。
查看依赖
查看当前依赖:
pdm list
查看依赖树:
pdm list --tree
输出示例:
requests
├── charset-normalizer
├── certifi
├── urllib3
└── idna
非常直观。
删除依赖
删除包:
pdm remove flask
执行后:
- pyproject.toml更新
- lock文件更新
无需手动修改。
更新依赖
更新全部依赖:
pdm update
更新指定包:
pdm update requests
运行项目
类似 npm run。
执行:
pdm run python main.py
或者:
pdm run pytest
无需手动激活虚拟环境。
发布Python包
构建项目:
pdm build
生成:
dist/
├── xxx.whl
└── xxx.tar.gz
上传到PyPI:
pdm publish
即可完成发布。
启用PEP 582模式
传统方式:
venv
PDM还支持:
PEP 582
模式。
开启:
pdm config python.use_venv False
安装依赖后:
__pypackages__
目录会出现在项目中。
效果类似:
Node.js
└── node_modules
不再依赖虚拟环境。
启用uv加速
近年来最火的Python工具之一:
uv
由 Rust 编写。
安装速度远超 pip。
PDM 已支持 uv 集成。
开启:
pdm config use_uv true
之后安装依赖时会自动调用 uv。
速度提升非常明显。
注意:
uv
不能与:
PEP 582
同时使用。
常用命令汇总
| 命令 | 说明 |
|---|---|
| pdm new | 创建项目 |
| pdm add | 添加依赖 |
| pdm remove | 删除依赖 |
| pdm update | 更新依赖 |
| pdm install | 安装依赖 |
| pdm list | 查看依赖 |
| pdm run | 运行命令 |
| pdm build | 构建项目 |
| pdm publish | 发布项目 |
| pdm config | 修改配置 |
PDM适合哪些开发者?
推荐使用PDM的人群:
Python库开发者
需要:
- 构建wheel
- 发布PyPI
PDM非常适合。
Web开发者
例如:
- Django
- Flask
- FastAPI
项目管理体验优秀。
团队协作开发
借助:
pdm.lock
确保环境一致。
Poetry用户
如果觉得:
- Poetry太重
- 灵活性不足
可以尝试迁移到PDM。
总结
PDM是一个符合现代Python标准的包管理工具,它将依赖管理、环境管理、构建发布和插件扩展整合到了一起。
相比传统的:
pip + virtualenv
方案,它更加规范、自动化和高效。
其最大的亮点包括:
- 支持PEP 621标准
- Lock文件管理
- 类似pnpm的共享缓存
- 支持uv极速安装
- 支持PEP 582
- 强大的插件生态
如果你正在寻找 Poetry 之外的现代 Python 开发方案,那么 PDM 非常值得体验。
项目地址
GitHub:
https://github.com/pdm-project/pdm
官方文档:
https://pdm-project.org/zh-cn/
更多推荐



所有评论(0)