PDM介绍
一个现代的 Python 包管理器,支持 PEP 582
跟pipenv与poetry有着相同功能
抛弃传统包管理器所需的虚拟环境 - PEP 582
比poetry更快的依赖解析
类似pnpm的中心化安装缓存
插件系统
PEP 621 元数据格式
兼容 PEP 517 的构建后端,用于构建发布包(源码格式与 wheel 格式)
实际使用中,由于各种IDE还没有插件上的支持,所以需要一点手动配置才可以使用,这点对于pipenv和poetry稍显劣势,不过估计也是迟早的事:)
项目github:pdm-project/pdm (github.com)
安装
linux:
curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3 -
windows:
(Invoke-WebRequest -Uri https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py -UseBasicParsing).Content | python -
不建议使用pip,以保持与python根package的隔离
开启PEP-582支持
PEP-582规定了一种依赖导入方式,它允许使用程序同目录中的__pypackages__作为优先依赖导入
PDM-EXAMPLE
└─__pypackages__
└─3.XX
├─include
├─lib
│ ├─pydantic
└─Scripts
目录结构如上,__pypackages__的优先级是比根site-packages还要高的,任何依赖都会优先在此寻找,使用pdm管理依赖时,依赖包就下载至此
使用pdm开启PEP-582支持:
pdm --pep582
IDE支持
vscode
`将下面的配置添加至项目下的.vscode/settings.json
{
"python.autoComplete.extraPaths": [
"${workspaceFolder}/__pypackages__/<major.minor>/lib"
],
"python.analysis.extraPaths": [
"${workspaceFolder}/__pypackages__/<major.minor>/lib"
],
}
同时确保开启了全局PEP-582支持
Pycharm
只需要将__pypackages__/<major.minor>/lib标记为源根Sources Root即可

解释器设置为同一版本的python即可
常用命令
初始化
# 注意位置 \PDM-EXAMPLE\(在这里)
pdm init
添加依赖
pdm add requests
设置pypi镜像
pdm config pypi.url https://test.pypi.org/simple
移除依赖
pdm remove requests
升级依赖
# 升级所有依赖
pdm update
# 单独升级
pdm update requests
安装pyproject.toml内所有依赖
pdm sync