27

Pip 支持该pyproject.toml文件,但到目前为止,新模式的所有实际使用都需要一个自动生成这些文件的第三方工具(例如,诗歌和 pip)。不像setup.py已经是人类可写的,pyproject.toml不是(还)。

setuptools 文档

[build-system]
requires = [
  "setuptools >= 40.9.0",
  "wheel",
]
build-backend = "setuptools.build_meta"

但是,此文件不包括包依赖项(如 PEP 621 中所述)。Pip 确实支持使用安装包,pyproject.toml但 pep 没有指定如何pyproject.toml为官方构建系统编写包依赖项setuptools

如何在 中编写包依赖项pyproject.toml


相关 StackOverflow 问题:

4

1 回答 1

37

佩普 621

有一个名为PEP 621的标准指定项目的元数据(包括依赖项)应如何在pyproject.toml文件中布局。

随着时间的推移,越来越多的构建后端添加了对PEP 621的支持,例如:


我的问题不同,因为我要求人工编写pyproject.toml

pyproject.toml文件是“人类可写的”(以及setup.cfg)。我将在这里为setuptools诗歌给出答案。

但首先,重要的是要知道,在这种情况下setuptools诗歌的行为就像所谓的构建后端,并且今天有多个这样的后端可用,setuptools诗歌只是其中的两个例子。其他构建后端包括flitpymsbuildpdm等。他们中的一些人希望他们的配置(包括依赖项)被写入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.tomlsetup.cfgsetup.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'

参考资料

于 2020-10-01T08:44:57.177 回答