所以,我正在尝试按照本教程创建一个新的 Python 包:https://packaging.python.org/en/latest/tutorials/packaging-projects/
如教程所说,在我的
pyproject.toml
中我应该有这样的结构:
[project]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
{ name="Example Author", email="[email protected]" },
]
description = "A small example package"
但是当我用
poetry init
创建这个文件时,它创建了这个结构:
[tool.poetry]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
{ name="Example Author", email="[email protected]" },
]
description = "A small example package"
这两者之间的主要区别在于
[project]
而不是 [tool.poetry]
部分标题。
我还看到,当 poetry
中没有
[tool.poetry]
部分时,
pyproject.toml
无法对项目做任何事情
这两者有什么区别?
我的
pyproject.toml
中应该只有一个还是同时有两个?如果我应该保留两者,它应该包含什么?
如果只有
[tool.poetry]
,我是否需要遵循与[project]
相同的内容和子部分规则?因此,例如 [project.urls]
将重命名为 [tool.poetry.urls]
?
在 PyPI 上发布的最佳面向未来的选择是什么?还是没有区别?
将
[build-system]
从 poetry-core
更改为 setuptools
是个好主意吗?还是我应该保留poetry-core
?
1。这两者有什么区别?
[project]
部分是标准化的(也称为PEP-621)。但是 Poetry 比这个标准的创建要早,所以它开始使用它自己的部分 [tool.poetry]
。 Poetry计划增加对标准化[project]
的支持(参见python-poetry/poetry/issues/3332
和python-poetry/roadmap/issues/3
),但这需要时间
两者区别很小,基本是同一个包元数据的不同表示法。最显着的差异(您应该注意的差异)是关于声明依赖关系的符号。这是分歧最关键的地方。
2。我的 pyproject.toml 中应该只有一个还是同时有两个?如果我应该保留两者,它应该包含什么?
你应该只有一个。您必须选择构建后端。如果您的构建后端是
poetry-core
那么您需要 [tool.poetry]
部分。如果您选择需要 [project]
的构建后端(setuptools 的情况),那么这就是您应该拥有的。
3。如果只有
[tool.poetry]
,我是否需要遵循与[project]
相同的内容和子部分规则?因此,例如 [project.urls]
将重命名为 [tool.poetry.urls]
?
这不完全是一对一的等价,有一些区别。如果您使用 Poetry,请遵循 Poetry 的文档。或者
[project]
specification 如果你使用其他东西(setuptools,等等)。
4。在 PyPI 上发布的最佳面向未来的选择是什么?还是没有区别?
差别不大。您可能会争辩说选择遵循
[project]
标准的构建后端更好,但实际上这不是您应该选择的基础。您应该根据许多其他标准做出选择。
例如:
5。将
[build-system]
从 poetry-core
更改为 setuptools
是个好主意吗?或者我应该保留poetry-core
?
Poetry“开发工作流程工具”不允许使用除
poetry-core
之外的任何其他构建后端。所以如果你想继续为你的项目使用Poetry,你别无选择,只能继续使用poetry-core
作为构建后端。
[project]
部分在pyproject.toml
中是强制性的。如果条目丢失,构建工具(在[build-system]
部分定义)必须动态添加它。我想这正是poetry
所做的。
来自文档:
本规范中定义的键必须位于 pyproject.toml 中名为 [project] 的表中。任何工具都不能向该表添加本规范未定义的键。对于希望将自己的设置存储在 pyproject.toml 中的工具,它们可以使用构建依赖声明规范中定义的 [tool] 表。缺少 [project] 表意味着构建后端将动态提供所有键。
所以你在使用
[project]
时不需要poetry
。如果更改构建系统,则必须将 pyproject.toml 转换为 PEP 621 兼容。