setup.cfg是否已弃用?

tor*_*gen 8 python distutils setuptools python-3.x python-packaging

对我来说,这还不是很清楚setup.cfg。我正在寻找有关PEP 508环境标志物的其他问题的解决方案,这让我感到非常困惑。

在我看来,这setup.cfg是对的改进setup.py,因为它是声明性的,不涉及运行任意代码以使程序包可安装,使分发恶意Python程序包更加困难,使运行Python程序包注册表更容易。

因此,setuptools文档中这里提到了setuptools在30.3.0 (8 Dec 2016)版本中对setup.cfg的支持,这是最近的。所以,这必须是新事物,对吗?

不完全的。至少从2.6开始就有很长一段时间的distutils支持setup.cfg。已经9年了。

同时,在这里的wheel文档中,据说setup.cfg现在已弃用,最好通过extras_require参数提供环境标记。而且它提到了setuptools,因此它与可能不赞成使用的distutils风格无关setup.cfg

那么,实际上是怎么回事?是setup.cfg不赞成使用,还是最新的处理方式?

AXO*_*AXO 11

我想就最近的发展补充几点说明:

PEP 518仍处于临时状态,但我将其解释为邀请才能使用pyproject.toml,而不是setup.cfg。引自 PEP:

setup.cfgsetuptools 将其用作通用格式存在两个问题。一是它们是.ini存在上面configparser讨论中提到的问题的文件。另一个原因是该文件的架构从未被严格定义过,因此不知道哪种格式可以安全使用而不会混淆 setuptools 安装。

来自black 的文档

PEP 518定义pyproject.toml为一个配置文件,用于存储 Python 项目的构建系统要求。随着类似工具的帮助下 诗歌无声无息,它完全可以取代的需要setup.pysetup.cfg文件。

pip 19.0实现了PEP 517以允许项目通过pyproject.toml.

setuptools有一个标题为“将setup.cfg 规范与 pyproject.toml 合并并弃用 setup.py 和 setup.cfg ”的未决问题。然而,setuptools伙计们还没有就此做出决定。有一个关于如何进行的公开讨论

免责声明:我自己完全迷失在 Python 的包装丛林中。

  • 迷失在丛林中:“每当某件事可以用两种方式完成时,就会有人感到困惑。每当某件事是品味问题时,讨论就会永远拖延下去。——B. Stroustrup” (3认同)
  • 或者 Python 可能刚刚采用了 `package.json`,特别是考虑到它非常适合 Python 的内部导入机制......但是,[xkcd 927](https://xkcd.com/927/) 再次成为重点。 (2认同)

sor*_*rin 4

不,setup.cfg它并没有被弃用,而且您提到的文档具有误导性。

有一些严重的原因,比如安全性,与需要执行的事实有关setup.py,这也是放弃它的主要原因。

这是临时演员的肮脏伎俩:

[options.extras_require]
pdf = ReportLab>=1.2; RXP
rest = docutils>=0.3; pack ==1.1, ==1.3
Run Code Online (Sandbox Code Playgroud)

  • 为什么会脏呢?该示例直接来自文档 (4认同)