是不是弃用了`setup.cfg`?

时间:2017-07-03 05:53:14

标签: python python-3.x setuptools distutils python-packaging

我不完全清楚setup.cfg的状态是什么。我正在为我的other question寻找有关PEP 508环境标记的解决方案,我变得非常困惑。

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

所以,here in setuptools docs提到setuptools支持30.3.0 (8 Dec 2016)版本中的setup.cfg,这是最近的版本。所以,这必须是一件新事物,对吗?

不完全。 distutils had support for setup.cfg for a long time,至少从2.6开始。已经9年了。

与此同时,here in wheel docs已经说过setup.cfg现已弃用,并且最好通过extras_require参数提供环境标记。它提到了setuptools,所以它不是setup.cfg可能被弃用的distutils味道。

那么,究竟发生了什么? {@ 1}}已被弃用,还是最近的做法?

2 个答案:

答案 0 :(得分:0)

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

有一些严重的原因,例如安全与setup.py需要执行这一事实有关,这是远离它的主要原因。

这是额外的肮脏技巧:

[options.extras_require]
pdf = ReportLab>=1.2; RXP
rest = docutils>=0.3; pack ==1.1, ==1.3

答案 1 :(得分:0)

我想对近期的发展做一些说明:

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

  

setuptools通常将setup.cfg用作两个问题   格式。一种是它们是.ini文件,存在上述问题   在上面的configparser讨论中。另一个是针对   该文件从未经过严格定义,因此未知   哪种格式将来可以安全使用而不会潜在   令人困惑的setuptools安装。

来自black's documentation

  

PEP 518pyproject.toml定义为配置文件以存储内部版本   Python项目的系统要求。借助诸如   PoetryFlit,它可以完全取代对setup.py的需求,并且   setup.cfg个文件。

pip 19.0实现了PEP 517,以允许项目通过pyproject.toml指定构建后端。

setuptools有一个未解决的问题,标题为“ Merge setup.cfg spec with pyproject.toml one and deprecate setup.py and setup.cfg”。但是,setuptools个人还没有决定。 open discussion关于如何进行。

免责声明:我本人对Python的打包丛林深感迷茫。