Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Setuptools 如何编写一个可以安装软件包的最低限度工作的pyproject.toml文件?_Setuptools_Python Packaging_Python Poetry_Pyproject.toml_Pep517 - Fatal编程技术网

Setuptools 如何编写一个可以安装软件包的最低限度工作的pyproject.toml文件?

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中编写包依赖项? 相关堆栈溢出问题: 这

Pip支持
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'
      
      参考资料:


      @Keto这能回答你的问题吗?为了接受这个答案,有什么需要澄清的吗?是的,谢谢。虽然这不是我喜欢听到的答案,但它是正确和可接受的答案。答案值得更新,因为setuptools和其他工具采用了PEP 621(特别是)。一些工具开始支持它。但它很年轻。我在回答中已经提到了pdm。稍后,其他一些构建后端也添加了对PEP621的支持,但我不记得具体是哪一个,可能会看、、等。@Keto“虽然这不是我喜欢听到的答案”,你这是什么意思?你的期望是什么?这不是对答案的批评。我只是想说,我希望PEP621已经在setuptools中实现了,这样我们就不会陷入人们使用(
      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'