PEP 621 元数据#
项目元数据存储在 pyproject.toml
中。这些规范由 PEP 621、PEP 631和 PEP 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 440 和 PEP 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"
]
可选依赖关系#
你可以有一些可选的需求,这类似于 setuptools
的 extras_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-pep517
和 hatchling
的相对路径。
例如,如果您运行 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"