目前有多种打包工具在 Python 社区中很流行,虽然setuptools
看起来仍然很流行,但它不再是事实上的标准。这种情况给最终用户和开发人员带来了许多麻烦:
- 对于
setuptools
-based 软件包,如果尚未安装,则从发行版的源代码/构建安装可能会失败setuptools
;
- 基于其他打包工具的包不能使用
pip
. 必须先安装打包工具,然后使用工具特定的命令来安装/构建分发包;
- 如果包作者决定更改打包工具,则还必须更改工作流以使用不同的工具特定命令。
pyproject.toml
是PEP 517和PEP 518为解决这些问题而引入的新配置文件:
...想想为项目生成构建工件所需的(粗略)步骤:
- 项目的源代码签出。
- 安装构建系统。
- 执行构建系统。
此 PEP [518] 涵盖步骤 #2。PEP 517涵盖步骤 #3 ...
任何工具也可以使用自己的部分(表)扩展此文件以接受特定于工具的选项,但这取决于他们而不是必需的。
基于forsetuptools
的包pyproject.toml
并不严格意味着要替换setup.py
,而是在仍然需要时确保其正确执行。对于其他打包工具——是的,它是:
如果build-backend
存在密钥,则优先,源代码树遵循指定后端的格式和约定(因此 nosetup.py
是必需的,除非后端需要它)。项目可能仍希望包含setup.py
与不使用此规范的工具的兼容性。
“可编辑安装”是一项特定功能,因此PEP 517setuptools
不支持它:
Install Options:
-e, --editable <path/url> Install a project in editable mode (i.e. setuptools "develop mode")
要以可编辑模式安装setuptools
-based 包,它需要有一个setup.py
至少包含最少内容的文件:
from setuptools import setup
setup()