Python技术迷

来了!划时代的 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