-installed`: 尝试重用工作集中已安装的版本。这也会影响命令行中请求的包。
eager
: 尝试锁定命令行中包及其递归子依赖项的更新版本,并保留其他依赖项不变。all
: 更新所有依赖项和子依赖项。
更新包到违反版本规范符的版本
可以给 PDM 一个 -u/--unconstrained
选项,让它忽略 pyproject.toml
中的版本规范符。
这类似于 yarn upgrade -L/--latest
命令。此外,
pdm update
也支持 --pre/--prerelease
选项。
删除现有依赖
从项目文件和库目录中删除现有依赖:
# 从默认依赖中删除 requests
pdm remove requests
# 从可选依赖的 'web' 组中删除 h11
pdm remove -G web h11
# 从开发依赖的 `test` 组中删除 pytest-cov
pdm remove -dG test pytest-cov
列出过时的包和最新版本
+++ 2.13.0
列出过时的包和最新版本:
pdm outdated
你可以传递全局模式来过滤要显示的包:
pdm outdated requests* flask*
选择要安装的依赖组的一个子集
假设我们有一个包含以下依赖的项目:
[project] # 这是生产依赖
dependencies = ["requests"]
[project.optional-dependencies] # 这是可选依赖
extra1 = ["flask"]
extra2 = ["django"]
[tool.pdm.dev-dependencies] # 这是开发依赖
dev1 = ["pytest"]
dev2 = ["mkdocs"]
命令 | 它的作用 | 注释 |
---|---|---|
pdm install |
安装锁文件中锁定的所有组 | |
pdm install -G extra1 |
安装生产依赖、开发依赖和 “extra1” 可选组 | |
pdm install -G dev1 |
仅安装 “dev1” 开发组 | |
pdm install -G:all |
安装生产依赖、开发依赖和 “extra1”、”extra2” 可选组 | |
pdm install -G extra1 -G dev1 |
安装生产依赖、”extra1” 可选组和仅 “dev1” 开发组 | |
pdm install --prod |
仅安装生产环境 | |
pdm install --prod -G extra1 |
安装生产依赖和 “extra1” 可选 | |
pdm install --prod -G dev1 |
失败,--prod 不能与开发依赖一起使用 |
留下 --prod 选项 |
只要没有传递 --prod
并且 -G
没有指定任何开发组,所有 开发依赖就会被包括在内。
此外,如果你不希望根项目被安装,可以添加 --no-self
选项,而 --no-editable
可以在你希望所有包都以非可编辑版本安装时使用。
你也可以使用 pdm lock
命令与这些选项一起锁定仅指定的组,这将记录在锁文件的 [metadata]
表中。如果没有指定 --group/--prod/--dev/--no-default
选项,pdm sync
和 pdm update
将使用锁文件中的组进行操作。然而,如果命令中给出了锁文件中未包含的任何组,PDM 将引发错误。
显示已安装的包
类似于 pip list
,你可以列出在包目录中安装的所有包:
pdm list
包括和排除组
默认情况下,将列出工作集中安装的所有包。你可以通过 --include/--exclude
选项指定要列出哪些组,
并且 include
的优先级高于 exclude
。
pdm list --include dev
pdm list --exclude test
有一个特殊的组 :sub
,当它被包括时,也会显示所有间接依赖。默认情况下它是被包括的。
你也可以传递 --resolve
给 pdm list
,它将显示在 pdm.lock
中解析的包,而不是安装在工作集中的包。
更改输出字段和格式
默认情况下,列表输出将显示名称、许可证和位置,你可以通过 --fields
选项查看更多字段或指定字段的顺序:
pdm list --fields name,licenses,version
有关所有支持的字段,请参阅 CLI 参考。
此外,你可以指定除默认表格输出之外的输出格式。支持的格式和选项有 --csv
、 --json
、 --markdown
和 --freeze
。
显示依赖树
或者通过以下命令显示依赖树:
$ pdm list --tree
tempenv 0.0.0
└── click 7.0 [ required: <7.0.0,>=6.7 ]
black 19.10b0
├── appdirs 1.4.3 [ required: Any ]
├── attrs 19.3.0 [ required: >=18.1.0 ]
├── click 7.0 [ required: >=6.5 ]
├── pathspec 0.7.0 [ required: <1,>=0.6 ]
├── regex 2020.2.20 [ required: Any ]
├── toml 0.10.0 [ required: >=0.9.4 ]
└── typed-ast 1.4.1 [ required: >=1.4.0 ]
bump2version 1.0.0
注意 --fields
选项不适用于 --tree
。
按模式过滤包
你也可以通过向 pdm list
传递模式来限制要显示的包:
pdm list flask-* requests-*
??? 警告 “注意 shell 扩展”
在大多数 shell 中,通配符 *
会在当前目录下有匹配文件时被扩展。
为了避免得到意想不到的结果,你可以用单引号包装模式:pdm list 'flask-*' 'requests-*'
。
在 --tree
模式下,仅会显示匹配包的子树。这可以用来达到与 pnpm why
相同的目的,即显示特定包为何需要。
$ pdm list --tree --reverse certifi
certifi 2023.7.22
└── requests 2.31.0 [ requires: >=2017.4.17 ]
└── cachecontrol[filecache] 0.13.1 [ requires: >=2.16.0 ]
管理全局项目
有时用户可能想要跟踪全局 Python 解释器的依赖项。
使用 PDM 通过大多数子命令支持的 -g/--global
选项,可以很容易地做到这一点。
如果传递了该选项,<CONFIG_ROOT>/global-project
将被用作项目目录,它几乎与普通项目相同,只是 pyproject.toml
会为你自动创建
并且它不支持构建特性。这个想法来自 Haskell 的 stack。
然而,与 stack
不同,PDM 默认情况下如果找不到本地项目,不会自动使用全局项目。
用户应该明确传递 -g/--global
来激活它,因为如果包进入了错误的地方,这是不太令人愉快的。
但 PDM 也把决定权留给用户,只需将配置 global_project.fallback
设置为 true
。
默认情况下,当 pdm
隐式使用全局项目时,会打印以下消息:Project is not found, fallback to the global project
。
要禁用此消息,将配置 global_project.fallback_verbose
设置为 false
。
如果你想让全局项目跟踪另一个项目文件,而不是 <CONFIG_ROOT>/global-project
,
你可以通过 -p/--project <path>
选项提供项目路径。
特别是如果你传递 --global --project .
,
PDM 将把当前项目的依赖项安装到全局 Python 中。
警告 当使用全局项目时,要小心使用
remove
和sync --clean/--pure
命令,因为它可能会移除在系统 Python 中安装的包。