如何解决如何编写一个最低限度的可以安装软件包的pyproject.toml文件?
Pip支持pyproject.toml
文件,但是到目前为止,新模式的所有实际使用都需要使用第三方工具来自动生成这些文件(例如,诗歌和pip)。与setup.py
已经可以编写的pyproject.toml
不同,[build-system]
requires = [
"setuptools >= 40.9.0","wheel",]
build-backend = "setuptools.build_Meta"
还不是。
pyproject.toml
但是,此文件不包括程序包依赖项(因为它在PEP518中不应该,它仅处理构建依赖项)。 Pip支持使用pyproject.toml
安装软件包,但是pep并未在官方构建系统setuptools
的{{1}}中指定如何编写软件包依赖项。
如何在pyproject.toml
中写程序包依赖项?
StackOverflow相关问题:
-
How to init the pyproject.toml file
此问题要求一种自动生成
pyproject.toml
的方法,我的问题有所不同,因为我要求人工编写的pyproject.toml
。
解决方法
所有这些文件都是“ 可写的”。我将在这里为setuptools提供一个答案(稍后会添加诗歌的一部分)。但是重要的是要知道,在这种情况下, setuptools 被称为 build backend ,并且今天有多个这样的后端可用, setuptools 只是其中之一。其他构建后端包括poetry,flit,pymsbuild,pdm等。他们中的某些人希望将其配置(包括依赖项)写在pyproject.toml
中,而另一些人则希望将其写在另一个文件中。
几天以来(2020年12月),就有一个标准(PEP621)规定了应如何在pyproject.toml
文件中布置项目的元数据(包括依赖项)。但是据我所知,还没有工具采用它,显然现在还为时过早。
设置工具
截至今天( 2020年10月), setuptools 不支持在pyproject.toml
中写入其配置。您仍然必须编写setup.py
或setup.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:
关于依赖关系的具体参考:
- https://setuptools.readthedocs.io/en/latest/userguide/dependency_management.html
- https://www.python.org/dev/peps/pep-0508/
- https://www.python.org/dev/peps/pep-0440/
顺便说一句,请注意,在某些情况下,可能会完全省略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.cfg
或setup.py
)中写入配置,但我们还没有到达( 2020年10月)。
诗歌
在诗歌中,所有内容都在pyproject.toml
中定义。
此文件可以是手写。据我所知,完全没有必要明确地安装诗歌本身(诸如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'
参考:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。