pdm 是基于 pep 582 实现项目级依赖隔离的现代化 python 包管理器,无需虚拟环境即可通过 __pypackages__ 目录和中心化缓存提升安装速度与可移植性,并严格遵循 pep 621 管理依赖声明与锁文件。

venv 激活、路径污染、多 Python 版本切换卡壳。
为什么 pdm install 比 pip install 更快?
它默认启用中心化缓存(类似 pnpm),所有已下载的 wheel 或源码包都存到全局 ~/.cache/pdm,同一包在不同项目里不会重复下载或解压;同时它的依赖解析器专为二进制包优化,跳过冗余回溯,尤其在装 numpy、torch 这类大包时感知明显。
pdm add 和 pip install 写入的位置完全不同
前者把依赖直接写进 pyproject.toml 的 [project.dependencies](符合 PEP 621),后者只改 site-packages,不记录来源。这导致:
-
pdm add requests→ 自动更新pyproject.toml+ 生成/更新pdm.lock -
pip install requests→ 只装包,不写配置,下次pdm install会忽略它 - 混用二者极易造成
ImportError或锁文件失效
不用 source .venv/bin/activate 是怎么跑起来的?
PDM 在项目根目录下维护一个隐式执行环境:它通过 .pdm-python 记录所用 Python 解释器路径,并在 pdm run 时自动注入 __pypackages__ 到 PYTHONPATH。这个目录由 PEP 582 规范定义,Python 3.12+ 原生支持,旧版本靠 PDM 注入 sitecustomize.py 模拟。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
注意:pdm run python script.py 才走这套机制;直接敲 python script.py 仍走系统默认解释器,不加载项目依赖。
pdm install --prod 和 --dev 的行为边界很窄
开发依赖(如 pytest、mypy)只写在 [project.optional-dependencies.dev],运行 pdm install --prod 时它们被明确排除——但这个“排除”只影响安装动作,不影响 pdm run pytest 这种命令调用(因为 pdm run 会按需加载全部已安装包)。真正起作用的是锁文件粒度:每次 pdm lock 都会生成完整依赖图,--prod 只控制最终安装哪些。
容易踩的坑:误以为 --prod 能彻底隔离 dev 包,结果 CI 环境因残留 dev 包触发静态检查失败。
__pypackages__,隔离性就立刻瓦解。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










