跳到主要内容

即将迁移 stdlib("c")

几乎自 conda-forge 成立以来,我们 C 标准库 ("stdlib") 的基线版本一直没有改变。这个库带来额外的复杂性,因为它是操作系统的基本组成部分,也是 conda/mamba/etc. 少数不能安全发布的东西之一。

随着生态系统的发展和许多软件包开始需要更新的基线版本,我们在某个时候也需要跟进。但是,为了避免破坏旧系统上的用户,我们需要建立基础设施,使我们的软件包具有足够准确的元数据,以便 conda 可以避免在旧系统上安装需要较新 stdlib 的软件包。

在 conda-forge 利益相关者之间经过多次讨论后,我们达成的解决方案是引入一个新的 Jinja2 函数 {{ stdlib("c") }},它反映了给定的配方需要 C stdlib。使这种关系明确化将使我们能够轻松正确地反映每个 feedstock 以及我们的全局 pinning 中对较新 stdlib 版本的需求。

到目前为止,stdlib 是作为编译器堆栈的一部分隐式处理的。为了允许这种转变发生,我们需要将此函数引入到基本上所有编译的配方中。这将分阶段完成,首先是单个迁移,然后附加到 conda-forge 中所有正在进行的迁移。

piggyback 迁移器的逻辑试图正确处理大多数情况,但不可能涵盖所有极端情况。至于所有 feedstock 维护者都可以独立应用的一些通用规则

  • 如果 feedstock 在 build 部分中使用 - {{ compiler(...) }} jinja,请在 build 环境中添加一行 - {{ stdlib("c") }}
  • 如果 feedstock 使用 - sysroot_linux-64 2.17 # [linux64](或变体),请删除此行并将以下内容添加到您的 conda_build_config.yaml
    c_stdlib_version:              # [linux]
    - 2.17 # [linux]
  • 如果 feedstock 在 conda_build_config.yaml 中设置了 MACOSX_DEPLOYMENT_TARGET,例如 x86_64 为 10.13,请将该部分替换为以下内容(注意,这适用于 MACOSX_SDK_VERSION! )
    c_stdlib_version:              # [osx and x86_64]
    - 10.13 # [osx and x86_64]
  • meta.yaml 中,您可以删除 - __glibc >=2.17- __osx >={{ MACOSX_DEPLOYMENT_TARGET }} # [osx and x86_64] 的任何变体,因为这以后将通过 - {{ stdlib("c") }} 处理。

在应用上述任何更改后,应 重新渲染 feedstock。

随着这些机制开始推出,我们还将更新 conda-forge 知识库中的维护者文档。有关更多详细信息,请参阅此问题