Python pyproject.toml文件的用途是什么? 背景
我正要尝试从GitHub下载的Python包,并意识到它没有Python pyproject.toml文件的用途是什么? 背景,python,pip,packaging,pyproject.toml,Python,Pip,Packaging,Pyproject.toml,我正要尝试从GitHub下载的Python包,并意识到它没有setup.py,所以我无法用 pip install -e <folder> pip安装-e 相反,包中有一个pyproject.toml文件,该文件的条目似乎与setup.py通常的条目非常相似 我发现了什么 谷歌搜索让我进入了一个新的领域,它对第节中的setup.py提出了一些批评。但是,它没有明确说明应该避免使用setup.py,或者pyproject.toml将完全取代setup.py 问题 pyproject
setup.py
,所以我无法用
pip install -e <folder>
pip安装-e
相反,包中有一个pyproject.toml
文件,该文件的条目似乎与setup.py
通常的条目非常相似
我发现了什么
谷歌搜索让我进入了一个新的领域,它对第节中的setup.py
提出了一些批评。但是,它没有明确说明应该避免使用setup.py
,或者pyproject.toml
将完全取代setup.py
问题
pyproject.toml
是用来替换setup.py
的东西吗?或者一个包应该同时带有pyproject.toml
和setup.py
?如何安装处于可编辑状态的
pyproject.toml
项目?是的,pyproject.toml
是指定的文件格式,其中包含Python项目的构建系统要求
这解决了构建工具依赖性的鸡和蛋问题,即pip
可以读取pyproject.toml
以及可能需要的setuptools
或wheel
版本
如果需要setup.py
进行可编辑安装,可以在setup.py
中使用垫片:
#!/usr/bin/env python
import setuptools
if __name__ == "__main__":
setuptools.setup()
pyproject.toml
是新的。
仍然需要一个setup.py
:导入setuptools;setuptools.setup()
要使用pyproject.toml
,请运行python-mpip安装。
然后,如果项目使用的是而不是pip
,则可以将依赖项安装到%USERPROFILE%\AppData\Local\pypoyment\Cache\virtualenvs
)中,如下所示:
poetry install
然后运行依赖项,如:
和(使用.pre-commit config.yaml
):
目前,Python社区中流行多种打包工具,尽管
setuptools
似乎仍然很流行,但它不再是事实上的标准。这种情况给最终用户和开发人员带来了许多麻烦:
setuptools
,如果未安装setuptools
,则从发行版的源代码/版本安装基于的软件包可能会失败李>
无法使用pip
从源代码安装基于其他打包工具的包。必须首先安装打包工具,然后使用特定于工具的命令来安装/构建分发包李>
如果包作者决定更改打包工具,则还必须更改工作流以使用不同的工具特定命令
pyproject.toml
是由和引入的一个新配置文件,用于解决以下问题:
。。。考虑为项目生成构建工件所需的(粗略)步骤:
项目的源签出
安装生成系统
执行构建系统
本政治公众人物[518]涵盖了第2步。涵盖步骤#3
任何工具也可以使用自己的节(表)扩展此文件以接受特定于工具的选项,但这取决于它们,而不是必需的
对于基于setuptools
的软件包pyproject.toml
并不是严格意义上的要替换setup.py
,而是要在仍然需要时确保其正确执行。对于其他打包工具–是的,它是:
如果存在build backend
键,则该键优先,并且源代码树遵循指定后端的格式和约定(因此,除非后端需要setup.py
),否则不需要。项目可能仍然希望包含一个setup.py
,以便与不使用此规范的工具兼容
“可编辑安装”是一项特定于设置工具的功能,因此不受以下方面的支持:
安装选项:
-e、 --可编辑以可编辑模式安装项目(即setuptools“开发模式”)
要以可编辑模式安装基于setuptools
的软件包,它需要有一个setup.py
文件,其中至少包含最少的内容:
from setuptools import setup
setup()
请参阅。谢谢,@KlausD,这是谷歌搜索结果中的头条,但PEP-518没有对开发者是否应该避免使用setup.py
,以及如何在未使用setup.py
的情况下以可编辑状态安装软件包等问题采取立场。感谢您的帮助!所以看来pyproject.toml
几乎可以替代setup.py
,开发人员希望两者都使用,以便项目可以在可编辑状态下安装?奇怪的是,几年来我一直在各种小项目中使用setup.py
,从来没有必要消除“鸡和蛋的问题”。例如,如果您不使用setuptools,或者setup.py
不可编辑,这也很有用?
poetry run pre-commit install
poetry run pre-commit run --all-files
from setuptools import setup
setup()