项目元数据#

项目元数据存储在基于 PEP 621pyproject.tomlproject 表中。除此之外,还支持一些额外的特性。

动态项目版本#

pdm-backend 可以动态地确定项目的版本。要做到这一点,你需要从 pyproject.toml 中去掉 version 字段,并将 version 添加到 project.dynamic 列表中:

[project]
...
- version = "0.1.0" remove this line
+ dynamic = ["version"]

然后在 [tool.pdm.version] 表中指定如何获取版本信息。支持三种方式:

从给定文件路径中的静态字符串中读:

[tool.pdm.version]
source = "file"
path = "mypackage/__init__.py"

这样,文件必须包含如下一行:

__version__ = "0.1.0" # Single quotes and double quotes are both OK, comments are allowed.

从 SCM 标签读取,支持 git 和 hg

[tool.pdm.version]
source = "scm"

当从 SCM 不可用的源代码树构建时,可以使用环境变量 PDM_BUILD_SCM_VERSION 来假装设置了版本:

PDM_BUILD_SCM_VERSION=0.1.0 python -m build

得到特定的函数

[tool.pdm.version]
source = "call"
getter = "mypackage.version.get_version"

也可以为它提供字面参数:

getter = "mypackage.version.get_version('dev')"

写入动态版本文件#

您可以指示 pdm-backend 将动态版本回写到文件中。除了 file,所有源码都支持它。

[tool.pdm.version]
source = "scm"
write_to = "foo/version.txt"

默认情况下,pdm-backend 只编写 SCM 版本本身。可以将模板作为 Python 格式的字符串提供,以创建语法正确的 Python 赋值:

[tool.pdm.version]
source = "scm"
write_to = "foo/_version.py"
write_template = "__version__ = '{}'"

备注

pdm-backend 每次都会重写整个文件,因此不能在该文件中添加其他内容。

变量拓展#

环境变量#

你可以在依赖项字符串中以 ${VAR} 的形式引用环境变量,两者都适用于 dependenciesoptional-dependencies

[project]
dependencies = [
    "foo @ https://${USERNAME}:${PASSWORD}/mypypi.org/packages/foo-0.1.0-py3-none-any.whl"
]

在构建项目时,变量将使用环境变量的当前值展开。

相对路径#

您可以使用相对路径向项目根添加依赖项。要做到这一点,pdm-backend 提供了特殊的变量 ${PROJECT_ROOT} 来引用项目根,并且依赖关系必须用 file:// 定义:

[project]
dependencies = [
    "foo @ file:///${PROJECT_ROOT}/foo-0.1.0-py3-none-any.whl"
]

引用项目根目录以外的包:

[project]
dependencies = [
    "foo @ file:///${PROJECT_ROOT}/../packages/foo-0.1.0-py3-none-any.whl"
]

备注

三个斜杠 /// 是 Windows 和 POSIX 系统兼容性所必需的。

相对路径将扩展为本地机器上的绝对路径。因此,在发行版中包含它们是没有意义的,因为其他安装包的人不会有相同的路径。