来了!划时代的 Python 包管理工具 -- PDM
说真的,Python 的包管理这事儿,多少年一直让人又爱又恼。pip 用久了你会发现环境越变越乱,virtualenv、pipenv、conda 轮着上,项目一多就像在帮室友收拾鞋柜——永远缺一双,永远塞不下。
直到某一天,一个叫 PDM(Python Development Master) 的工具突然冒出来,我第一次用它的那一刻就有一种:“哎?怎么现在才出现?” 的感觉。
它不是来替代 pip 的,它更像是把 你原来需要用 pip + virtualenv + pip-tools + poetry 才能完成的事情,全部塞进一个轻盈的工具里。
为什么 PDM 会出现?
Python 社区这些年一直在推动一件事:从 “全局安装” 向 “项目隔离 + 标准化依赖声明” 转变。
PyPA 提出了 PEP 517、518、621……新的构建规范、元数据规范都来了,但 pip 作为“老兵”,很多机制不是随便能改。
而 PDM 则是从第一天就按现代标准构建的工具:
默认基于 PEP 582(本地包目录 __pypackages__/)完全遵守 PEP 621(pyproject.toml 声明项目) 依赖解析器强大且快速 内置环境隔离,不需要 virtualenv
一句话:它是“现代 Python 项目结构”模板工具 + 包管理器 + 环境管理器三合一。
第一次使用 PDM 是什么体验?
我第一次用 PDM 的场景特别真实:新机器、新项目、急着跑代码。一切都空空如也。
我脑子里第一反应是:
pip install ...
virtualenv ...
source ...
但我突然想起同事前几天说:“你试试 PDM,创建环境比 pipenv 快一倍。”
于是我试了一下👇
pdm init
它问了几句(项目名、版本、作者、解释器路径),然后直接帮我生成好了 pyproject.toml。
然后安装依赖时,我又懵了一下:
pdm add requests
结果它连虚拟环境都没让我管,直接在项目里创建了自己的环境目录,依赖就干干净净待在里面。
不需要虚拟环境、不需要 cd 到某个 env 里、不需要 activate。
这体验就像别人帮你搭好了饭桌,你只管坐下开吃。
PDM 的核心亮点:PEP 582 环境隔离
如果你从没见过 __pypackages__ 这个目录,你第一次看到会觉得像 Node.js 的 node_modules。
这不是巧合。
PEP 582 的本质就是:
在项目本地维护包,不污染全局环境,无需 virtualenv。
比如你安装依赖后目录结构会像这样:
my_project/
__pypackages__/
3.11/
lib/
requests/
bin/
pyproject.toml
PDM 会通过 shim 自动让 Python 运行时加载这里的包,不需要任何激活操作。
这非常适合:
多项目并行开发 CI/CD 构建隔离 不想创建大量虚拟环境的开发者
手把手建项目
新建项目:
pdm init
安装依赖:
pdm add fastapi uvicorn
写个简单代码 main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
defhello():
return {"msg": "Hello PDM"}
运行:
pdm run uvicorn main:app --reload
注意这里的 pdm run —— 它会自动使用项目自己的环境,不需要你 activate。
当你切换多个项目时,这种体验尤其爽。
PDM 的依赖管理能力很强
比如锁依赖:
pdm lock
或安装锁文件:
pdm install
它产生的 pdm.lock 非常清晰,也支持插件继续扩展。
此外它还支持:
可选依赖(类似 pip 的 extras) 依赖组 group dev/test/prod 环境分组
例如:
pdm add pytest --group dev
pdm add black --group dev
安装时可选择:
pdm install --with dev
对团队协作来说,这个比 pipenv 的体验舒服很多。
对比:PDM vs Poetry vs pipenv
尽量简洁点说:
pip + virtualenv
优点:传统、稳定 缺点:手工活太多
pipenv
优点:界面友好 缺点:解析依赖慢、偶尔卡死
Poetry
优点:集成度高、构建能力强 缺点:虚拟环境管理有点固执
PDM
优点:
遵循现代 PEP 规范 不依赖 virtualenv 解析器快 项目创建体验优秀 目录结构更清晰
缺点:
社区体量还不如 Poetry 依赖 PEP 582,但 CPython 目前还未原生实现
但成熟度已经非常可用了。
PDM 还有一个 killer feature:插件体系
你可以装插件扩展功能,例如:
pdm-bump(自动版本号管理) pdm-sync(更精准的依赖同步) pdm-venv(如果你就是想用虚拟环境)
安装插件示例:
pdm plugin add pdm-bump
这让 PDM 在构建系统方面的可扩展性非常强。
构建发布也超简单
PDM 使用 PEP 517 构建,所以发布流程就是:
pdm build
pdm publish
没有 poetry 那么多自定义配置,但胜在简单清晰。
使用 PDM 后最大的感受
总结几个“真实体验”:
环境干净:项目之间互不干扰 命令超级简单:pdm add、pdm run、pdm build 一把梭 现代感很强:看着 pyproject.toml 心情都变好了 速度快:依赖解析丝滑
如果你经常需要同时维护多个 Python 项目,换成 PDM 会有立竿见影的幸福感。
PDM 不是要取代 pip,而是提供一种“更现代、更 Pythonic 的项目管理方式”。
如果你正在用 pipenv、virtualenv、poetry,但觉得某些点不够顺滑,不妨试试 PDM —— 也许它会成为你新的默认工具。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB