【问题标题】:Is `setup.cfg` deprecated?`setup.cfg` 是否已弃用?
【发布时间】:2017-12-06 07:27:48
【问题描述】:

我并不完全清楚,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 风格无关。

那么,究竟发生了什么? setup.cfg 是否已弃用,还是最新的做事方式?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    来自black's documentation

    PEP 518pyproject.toml 定义为配置文件来存储构建 Python 项目的系统要求。在工具的帮助下,例如 PoetryFlit 可以完全替代 setup.pysetup.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 的包装丛林中。

    推荐阅读: Why you shouldn't invoke setup.py directly Paul Ganssle。

    【讨论】:

    • 或者 Python 可以采用 package.json,特别是考虑到它非常适合 Python 的内部导入机制...但是,xkcd 927 又是正确的。
    • 迷失在丛林中:“当某件事可以通过两种方式完成时,就会有人感到困惑。当某件事是口味问题时,讨论会永远拖下去。--B. Stroustrup”
    【解决方案2】:

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

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

    这里是额外的肮脏把戏:

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

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 2018-09-12
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多