如何编写一个可以安装包的最小工作 pyproject.toml 文件?

问题描述 投票:0回答:1

Pip 支持

pyproject.toml
文件,但到目前为止,新模式的所有实际使用都需要自动生成这些文件的第 3 方工具(例如,poetry 和 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 问题:

setuptools python-packaging python-poetry pyproject.toml pep517
1个回答
63
投票

我的问题不同,因为我要的是人工写的

pyproject.toml

首先,

pyproject.toml
文件总是“human-writable”。

然后,重要的是要知道在这种情况下 setuptoolsPoetry 扮演所谓的“build back-ends”(在“PEP 517”的意义上)的角色,并且有今天有很多这样的构建后端,setuptoolsPoetry(技术上

poetry-core
)只是其中的两个例子。

截至今天,似乎我所知道的大多数(如果不是全部)构建后端都希望它们的配置(包括依赖项)以

pyproject.toml

 编写。它也被称为“
PEP 621”。


[project]


有一个标准指定项目的打包元数据(包括依赖项)应如何在

pyproject.toml

 文件中的 
[project]
 部分:“
Declaring project metadata”。

这是我所知道的构建后端列表,遵循这个

[project]

标准:

我这里有

比较表.

对于所有

[project]

 兼容的构建后端,依赖项应写入项目源代码目录根目录的 pyproject.toml
 文件中,如下例所示:

[project] name = "Thing" version = "1.2.3" # ... dependencies = [ "SomeLibrary >= 2.2", "AnotherLibrary >= 4.5.6", ]

参考文献


setuptools(之前的版本61.0.0

setuptools61.0.0

之前的版本中不支持在
pyproject.toml
中写入项目的打包元数据。你必须写一个
setup.cfg
,或一个
setup.py
,或两者的组合。

我的建议是尽量写

setup.cfg

。这样的setup.cfg
可能是这样的:

[metadata] name = Thing version = 1.2.3 [options] install_requires = SomeLibrary >= 2.2 AnotherLibrary >= 4.5.6 packages = find:
 在大多数情况下,

setup.py

 可以完全省略,也可以短至:

import setuptools setuptools.setup()
具体依赖关系参考:

再次注意,在大多数情况下,可以完全省略

setup.py

文件,其中一个条件是
setup.cfg
文件和一个
pyproject.toml
文件存在并包含所有必要的信息。这是一个 
pyproject.toml
 的示例,它适用于 
setuptools 构建后端:

[build-system] build-backend = 'setuptools.build_meta' requires = [ 'setuptools', ]


诗歌

Poetry中,一切都在pyproject.toml

中定义,但它使用
Poetry特定的部分[tool.poetry]
而不是标准化的
[project]
部分。有一些
计划在未来的 Poetry 中添加对该标准的支持。

这个文件可以

手写。据我所知,没有明确需要明确安装诗歌本身(像pip install

pip wheel
这样的命令可以让你走得更远)。

pyproject.toml

文件可以很简单:

[tool.poetry] name = 'Thing' version = '1.2.3' [tool.poetry.dependencies] python = '^3.6' SomeLibrary = '>= 2.2' AnotherLibrary >= '4.5.6' [build-system] requires = ['poetry-core~=1.0'] build-backend = 'poetry.core.masonry.api'

参考文献

© www.soinside.com 2019 - 2024. All rights reserved.