PEP 621 元数据#

项目元数据存储在 pyproject.toml 中。这些规范由 PEP 621PEP 631PEP 639 定义。阅读 PEP 中的详细规范。

在本文档的下面部分,如果没有明确给出,元数据应该写在 [project] 表下。

多行描述#

由于 TOML 对多行字符串的支持,您可以将长描述拆分为多行。只需要记住转义新行,这样最终的描述就只会出现在包元数据中的一行上。当转义新行时,缩进也会被移除:

description = """\
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, \
    sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. \
    Ut enim ad minim veniam, quis nostrud exercitation ullamco \
    laboris nisi ut aliquip ex ea commodo consequat.\
"""

阅读 TOML关于字符串的规范

包的版本#

[project]
version = "1.0.0"
[project]
...
dynamic = ["version"]

[tool.pdm]
version = { source = "file", path = "mypackage/__version__.py" }

版本将从 mypackage/__version__.py 文件中读取,搜索模式为 __version__ = "{version}"。 在 动态版本中阅读有关其他配置的更多信息。

依赖规范#

project.dependencies 是遵循 PEP 440PEP 508 依赖项规范字符串的数组。

示例:

[project]
...
dependencies = [
    # Named requirement
    "requests",
    # Named requirement with version specifier
    "flask >= 1.1.0",
    # Requirement with environment marker
    "pywin32; sys_platform == 'win32'",
    # URL requirement
    "pip @ git+https://github.com/pypa/pip.git@20.3.1"
]

可选依赖关系#

你可以有一些可选的需求,这类似于 setuptoolsextras_require 参数。

[project.optional-dependencies]
socks = [ 'PySocks >= 1.5.6, != 1.5.7, < 2' ]
tests = [
  'ddt >= 1.2.2, < 2',
  'pytest < 6',
  'mock >= 1.0.1, < 4; python_version < "3.4"',
]

安装一组可选依赖项:

pdm install -G socks

-G 选项可以多次给出,以包含多个组。

上下文变量扩展#

根据所使用的构建后端,PDM 将展开依赖项字符串中的一些变量。

环境变量#

[project]
dependencies = ["flask @ https://${USERNAME}:${PASSWORD}/artifacts.io/Flask-1.1.2.tar.gz"]
[project]
dependencies = ["flask @ https://{env:USERNAME}:{env:PASSWORD}/artifacts.io/Flask-1.1.2.tar.gz"]

更多信息见 hatch

不要担心凭证泄漏,环境变量将在需要时展开,并在锁文件中保持不变。

相对路径#

当您从相对路径添加包时,PDM 将自动将其保存为 pdm-pep517hatchling 的相对路径。

例如,如果您运行 pdm add ./my-package,它将在 pyproject.toml 中生成以下一行。

[project]
dependencies = ["my-package @ file:///${PROJECT_ROOT}/my-package"]
[project]
dependencies = ["my-package @ {root:uri}/my-package"]

默认情况下,hatchling 不支持 直接引用 在依赖项字符串中,你需要在 pyproject.toml 中打开它:

[tool.hatch.metadata]
allow-direct-references = true

安装或锁定时,相对路径将基于项目根展开。

控制台的脚本#

以下内容:

[project.scripts]
mycli = "mycli.__main__:main"

将被翻译成 setuptools 风格:

entry_points = {
    'console_scripts': [
        'mycli=mycli.__main__:main'
    ]
}

同时,[project.gui-scripts] 将被翻译成 setuptools 风格的 gui_scripts 入口点组。

入口点#

其他类型的入口点由 [project.entry-points.<type>] 部分给出,格式与 [project.scripts] 相同:

[project.entry-points.pytest11]
myplugin = "mypackage.plugin:pytest_plugin"

如果入口点名称包含点或其他特殊字符,请用引号括起来:

[project.entry-points."flake8.extension"]
myplugin = "mypackage.plugin:flake8_plugin"