即将迁移 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 知识库中的维护者文档。有关更多详细信息,请参阅此问题。