pyproject.toml 中的 [tool.poetry] 和 [project] 表有什么区别?

toi*_*per 22 setuptools pypi python-packaging python-poetry pyproject.toml

语境

因此,我尝试按照本教程创建一个新的 Python 包:https://packaging.python.org/en/latest/tutorials/packaging-projects/

正如教程所说,在我的pyproject.tomlI 中应该具有以下结构:

[project]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
  { name="Example Author", email="author@example.com" },
]
description = "A small example package"
Run Code Online (Sandbox Code Playgroud)

但是当我用 创建这个文件时poetry init,它创建了这个结构:

[tool.poetry]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
  { name="Example Author", email="author@example.com" },
]
description = "A small example package"
Run Code Online (Sandbox Code Playgroud)

两者之间的主要区别在于[project]代替[tool.poetry]节标题。我还看到,poetry当没有[tool.poetry]部分时,这对项目没有任何作用pyproject.toml


所以我的问题是:

  1. 这两者有什么区别?

  2. 我的 中应该只有一个还是同时有两个pyproject.toml?如果我应该保留两者,它应该包含什么?

  3. 如果应该只有[tool.poetry],我是否需要遵循与 相同的内容和子部分规则[project]?例如,[project.urls]将重命名为[tool.poetry.urls]

  4. 在 PyPI 上发布的最佳、面向未来的选择是什么?还是没有区别?

  5. [build-system]from更改poetry-coresetuptools好主意吗?或者我应该保留poetry-core

sin*_*roc 31

1.这两者有什么区别?

[project]部分已标准化(也称为PEP-621)。但Poetry早于该标准的创建,因此它首先使用自己的部分[tool.poetry]Poetry正计划添加对标准化的支持[project](请参阅python-poetry/poetry/issues/3332python-poetry/roadmap/issues/3),但这需要时间。

两者之间的差异非常小,它们基本上是相同包元数据的不同表示法。最显着的区别(您应该关注的区别)是关于声明依赖项的符号。这是分歧最关键的地方。

2. 我的 pyproject.toml 中应该只有一个还是同时有两个?如果我应该保留两者,它应该包含什么?

你应该只有一个。您必须选择一个构建后端。如果您的构建后端是,poetry-core那么您需要该[tool.poetry]部分。如果您选择需要的构建后端(这是setuptools[project]的情况),那么这就是您应该拥有的。

3. 如果只有[tool.poetry],我是否需要遵循与 相同的内容和子部分规则[project]?例如,[project.urls]将重命名为[tool.poetry.urls]

这并不完全是一一对应的,存在一些差异。如果您使用 Poetry,请遵循Poetry的文档。或者如果您使用其他东西(setuptools等),则为[project]规范。

4. 在 PyPI 上发布的最佳、面向未来的选择是什么?还是没有区别?

这是由您(和您的团队)决定的。有人可能会说,选择遵循该标准的构建后端[project]更能适应未来的需求,但这只是众多标准中的一个。下表比较了做出此类选择时可以考虑的一些功能:

5. 将[build-system]from更改poetry-coresetuptools好主意吗?或者我应该保留poetry-core

Poetry“开发工作流程工具”不允许使用除poetry-core. 因此,如果您想继续在项目中使用Poetry,您别无选择,只能继续用作poetry-core构建后端。