Pdm
简介
PDM
全名 Python Development Master
官方:
安装方式
PDM 需要安装 Python 3.8+
pipx install pdm[all]
# 设置补全
pdm completion bash > /etc/bash_completion.d/pdm.bash-completion
pdm completion zsh > ~/.zfunc/_pdm
生态系统:https://github.com/pdm-project/awesome-pdm
使用
初始化项目
使用 PDM
初始化项目很简单,只需要创建一个文件夹,然后进入文件夹中执行 pdm init
命令即可完成初始化
初始化完成后项目中会生成如下文件:
-
解释器路径将被存储在
.pdm-python
文件中,可以使用pdm use
命令更改它,通过PDM_PYTHON
环境变量指定 Python 解释器路径。设置后,保存的.pdm-python
路径将被忽略 -
PDM 会向
pyproject.toml
文件添加name
、version
字段,以及一个 build backend 表格用于构建后端 -
在
pyproject.toml
中,在[tool.pdm]
表下有一个字段distribution
。如果将其设置为true
,PDM 将把该项目视为一个库。当运行pdm install
或pdm sync
时,库项目将被安装到环境中,除非指定了--no-self
-
requires-python
的值是根据 PEP 440定义的版本指定符 -
pdm.lock
和pdm.toml
文件
给项目添加依赖包
和大多数的包管理工具一样,PDM
也是用 add
指令。
pdm add
后面可以跟着一个或多个依赖项,依赖项的规范在 PEP 508 中描述
添加 requests
的过程:
和 Poetry 一样,安装使用的是 add 命令,但 pdm 的 add 比 poetry 好用,主要体现在分组:
- PDM 还允许通过提供
-G/--group <name>
选项来添加额外的依赖项组, 这些依赖项将分别进入项目文件中的[project.optional-dependencies.<name>]
表。 - PDM 也支持定义对开发有用的依赖组。 例如,一些用于测试,另一些用于代码检查。我们通常不希望这些依赖项出现在发行版的元数据中
额外的依赖项组 vs 开发依赖
[project] # 这是生产依赖项
dependencies = ["requests"]
[project.optional-dependencies] # 这是可选依赖项
extra1 = ["flask"]
extra2 = ["django"]
[tool.pdm.dev-dependencies] # 这是开发依赖项
dev1 = ["pytest"]
dev2 = ["mkdocs"]
可以使用其路径添加本地包。路径可以是文件或目录:
还可以从 git 存储库 URL 或其他版本控制系统安装。要对 git 使用 ssh 方案,只需将 "https://" 替换为 "ssh://git@"
# 在标签 `22.0` 上安装 pip 存储库
pdm add "git+https://github.com/pypa/pip.git@22.0"
# 在 URL 中提供凭据
pdm add "git+https://username:password@github.com/username/private-repo.git@master"
# 为依赖项命名
pdm add "pip @ git+https://github.com/pypa/pip.git@22.0"
# 或使用 #egg 片段
pdm add "git+https://github.com/pypa/pip.git@22.0#egg=pip"
# 从子目录安装
pdm add "git+https://github.com/owner/repo.git@master#egg=pkg&subdirectory=subpackage"
pdm add "wheel @ git+ssh://git@github.com/pypa/wheel.git@main"
可以使用 ${ENV_VAR}
变量语法在 URL 中隐藏凭据,这些变量将从环境变量中读取。
[project]
dependencies = [
"mypackage @ git+http://${VCS_USER}:${VCS_PASSWD}@test.git.com/test/mypackage.git@master"
]
本地目录 和 VCS 依赖项 可以以 可编辑模式 安装
# 相对路径到目录
pdm add -e ./sub-package --dev
# 到本地目录的文件 URL
pdm add -e file:///path/to/sub-package --dev
# VCS URL
pdm add -e git+https://github.com/pallets/click.git@main#egg=click --dev
查看项目依赖包
使用 pdm list
可以以列表形式列出当前环境已安装的包:
能以树状形式查看,直接依赖包和间接依赖包关系的层级一目了然
对于已有的项目进行初始化
执行命令
配置多个源
官方文档地址:https://pdm.fming.dev/1.15/pyproject/tool-pdm/#specify-other-sources-for-finding-packages
多个源的配置示例:
[tool.pdm]
[[tool.pdm.source]]
name = "pypi"
url = "http://devpi.local.liaosirui.com:3141/root/douban/+simple/"
verify_ssl = true
[[tool.pdm.source]]
name = "torch-cu116"
url = "http://devpi.local.liaosirui.com:3141/root/torch-cu116/+simple/"
verify_ssl = false
方案兼容
其他方案迁移到 pdm
如果当前使用的是其他的包管理器,比如 pipenv ,poetry,或者还在用最原始的 requirements.txt ,也可以很方便的迁移到 pdm 中来:
-
使用
pdm import -f {file}
无需初始化,直接转换 -
执行
pdm init
或者pdm install
的时候,会自动识别当前的依赖情况并转换
pdm 迁移到其他方案
可以将 pdm 管理的项目,导出为其他方案
- 将 pyproject.toml 转成 setup.py(暂未支持,https://pdm.fming.dev/latest/usage/project/#export-locked-packages-to-alternative-formats)
pdm export -f setuppy -o setup.py
# pdm export -f setuppy -o setup.py --without-hashes --pyproject --prod
- 将 pdm.lock 转成 requirements.txt
创建 3.6 环境
py36 无法使用 pdm,因此手动创建 venv
首次初始化
安装