如何编写一个最低限度的可以安装软件包的pyproject.toml文件?

问题描述

Pip支持pyproject.toml文件,但是到目前为止,新模式的所有实际使用都需要使用第三方工具来自动生成这些文件(例如,诗歌和pip)。与setup.py已经可以编写的pyproject.toml不同,[build-system] requires = [ "setuptools >= 40.9.0","wheel",] build-backend = "setuptools.build_meta" 还不是。

setuptools docs

pyproject.toml

但是,此文件不包括程序包依赖项(因为它在PEP518中不应该,它仅处理构建依赖项)。 Pip支持使用pyproject.toml安装软件包,但是pep并未在官方构建系统setuptools的{​​{1}}中指定如何编写软件包依赖项。

如何在pyproject.toml中写程序包依赖项?


StackOverflow相关问题:

解决方法

所有这些文件都是“ 可写的”。我将在这里为setuptools提供一个答案(稍后会添加诗歌的一部分)。但是重要的是要知道,在这种情况下, setuptools 被称为 build backend ,并且今天有多个这样的后端可用, setuptools 只是其中之一。其他构建后端包括poetryflitpymsbuildpdm等。他们中的某些人希望将其配置(包括依赖项)写在pyproject.toml中,而另一些人则希望将其写在另一个文件中。

几天以来(2020年12月),就有一个标准(PEP621)规定了应如何在pyproject.toml文件中布置项目的元数据(包括依赖项)。但是据我所知,还没有工具采用它,显然现在还为时过早。


设置工具

截至今天( 2020年10月), setuptools 不支持在pyproject.toml中写入其配置。您仍然必须编写setup.pysetup.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 维护者提供的plans,可以在pyproject.toml(而不是setup.cfgsetup.py)中写入配置,但我们还没有到达( 2020年10月)。


诗歌

诗歌中,所有内容都在pyproject.toml中定义。

此文件可以是手写。据我所知,完全没有必要明确地安装诗歌本身(诸如pip installpip 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'

参考

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...