微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何编写一个最低限度的可以安装软件包的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'

参考

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。