Setuptools 如何编写一个可以安装软件包的最低限度工作的pyproject.toml文件?
Pip支持Setuptools 如何编写一个可以安装软件包的最低限度工作的pyproject.toml文件?,setuptools,python-packaging,python-poetry,pyproject.toml,pep517,Setuptools,Python Packaging,Python Poetry,Pyproject.toml,Pep517,Pip支持pyproject.toml文件,但到目前为止,新模式的所有实际使用都需要第三方工具自动生成这些文件(例如,诗歌和Pip)。与已经是人类可写的setup.py不同,pyproject.toml还不是 从 但是,该文件不包括包依赖项(如PEP 621所述)。Pip确实支持使用pyproject.toml安装包,但pep没有指定如何在官方构建系统setuptools的pyproject.toml中编写包依赖项 如何在pyproject.toml中编写包依赖项? 相关堆栈溢出问题: 这
pyproject.toml
文件,但到目前为止,新模式的所有实际使用都需要第三方工具自动生成这些文件(例如,诗歌和Pip)。与已经是人类可写的setup.py
不同,pyproject.toml
还不是
从
但是,该文件不包括包依赖项(如PEP 621所述)。Pip确实支持使用pyproject.toml
安装包,但pep没有指定如何在官方构建系统setuptools
的pyproject.toml
中编写包依赖项
如何在pyproject.toml
中编写包依赖项?
相关堆栈溢出问题:
-
这个问题要求自动生成
,我的问题不同,因为我要求的是人工编写的pyproject.toml
pyproject.toml
- PEP 621
2021年12月
有一个名为的标准指定了项目元数据(包括依赖项)在
pyproject.toml
文件中的布局方式
2021年1月
2021年5月
更多构建后端增加了对PEP 621的支持,例如:
- 可能更多
我的问题有所不同,因为我要求一个人工编写的
pyproject.toml
pyproject.toml
文件是“人类可写的”(以及setup.cfg
)。我会在这里给出一个答案
但首先,重要的是要知道,在这种情况下,setuptools和poetry的行为就像所谓的构建后端一样,而且现在有多个这样的后端可用,setuptools只是其中之一。其他构建后端包括、和更多。他们中的一些人希望他们的配置(包括依赖项)写在pyproject.toml
中,另一些人希望它写在另一个文件中
设置工具 截至今天(2020年10月),setuptools不支持在
pyproject.toml
中编写其配置。您仍然需要编写setup.py
,或setup.cfg
,或两者的组合
我的建议是在中尽可能多地编写,并且setup.py
可以短到:
导入设置工具
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维护人员的建议,允许在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'
参考资料:
setup.py
+setup.cfg
)和其他人使用(setup.cfg
+pyproject.toml
)的奇怪状态,而我看到的是一个未来,我们只需要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'