佩普 621
有一个名为PEP 621的标准指定项目的元数据(包括依赖项)应如何在pyproject.toml
文件中布局。
随着时间的推移,越来越多的构建后端添加了对PEP 621的支持,例如:
我的问题不同,因为我要求人工编写pyproject.toml
该pyproject.toml
文件是“人类可写的”(以及setup.cfg
)。我将在这里为setuptools和诗歌给出答案。
但首先,重要的是要知道,在这种情况下setuptools和诗歌的行为就像所谓的构建后端,并且今天有多个这样的后端可用,setuptools和诗歌只是其中的两个例子。其他构建后端包括flit、pymsbuild、pdm等。他们中的一些人希望他们的配置(包括依赖项)被写入pyproject.toml
,一些人希望它在另一个文件中。
安装工具
截至今天(2021 年 10 月),setuptools不支持将其配置写入pyproject.toml
. 您仍然必须编写 asetup.py
或 asetup.cfg
或两者的组合。
我的建议是尽可能多地写在 中setup.cfg
,并且setup.py
可以短到:
import setuptools
setuptools.setup()
这样的setup.cfg
可能看起来像这样:
[metadata]
name = Thing
version = 1.2.3
[options]
install_requires =
SomeLibrary ~= 2.2
packages = find:
关于依赖项的参考:
顺便说一句,请注意在某些情况下可以setup.py
完全省略文件,其中一个条件是setup.cfg
文件和pyproject.toml
文件都存在并包含所有必要的信息。这是一个pyproject.toml
适用于setuptools构建后端的示例:
[build-system]
build-backend = 'setuptools.build_meta'
requires = [
'setuptools >= 43.0.0',
]
最后,setuptools维护者计划允许在(而不是or )中编写配置,但我们还没有(2021 年 10 月)。pyproject.toml
setup.cfg
setup.py
诗歌
在诗歌中,一切都被定义pyproject.toml
(但它使用诗歌特定的部分,即:它不使用PEP 621标准)。
这个文件可以手写。据我所知,没有严格的需要明确安装诗歌本身(诸如pip install
和之类的命令pip wheel
可以让你走得足够远)。
该pyproject.toml
文件可以很简单:
[tool.poetry]
name = 'Thing'
version = '1.2.3'
[tool.poetry.dependencies]
python = '^3.6'
SomeLibrary = '~2.2'
[build-system]
requires = ['poetry-core~=1.0']
build-backend = 'poetry.core.masonry.api'
参考资料: