Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyproject.toml文件的用途是什么? 背景_Python_Pip_Packaging_Pyproject.toml - Fatal编程技术网

Python pyproject.toml文件的用途是什么? 背景

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

我正要尝试从GitHub下载的Python包,并意识到它没有
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()