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

``指依赖的python版本,例`3.10`

将下面的配置添加至项目下的.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即可

imagepng

解释器设置为同一版本的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