即將針對 stdlib("c") 進行遷移
幾乎從 conda-forge 成立之初,我們 C 標準函式庫("stdlib")的基準版本就沒有改變過。這個函式庫帶來了額外的複雜性,因為它是作業系統的重要組成部分,也是 conda/mamba 等少數無法安全運送的東西之一。
隨著生態系統不斷發展,許多套件開始需要更新的基準版本,我們也需要在某個時候跟進。然而,為了避免在舊系統上造成使用者問題,我們需要建立基礎設施,讓我們的套件具有足夠精確的元數據,以便 conda 可以避免在舊系統上安裝需要較新 stdlib 的套件。
經過 conda-forge 利益相關者之間的多次討論,我們最終達成的解決方案是引入一個新的 Jinja2 函數 `{{ stdlib("c") }}`,以反映給定的 recipe 需要 C stdlib。使這種關係明確化將使其易於正確反映每個 feedstock 以及我們全域釘選中對較新 stdlib 版本的需求。
到目前為止,stdlib 是作為編譯器堆疊的一部分隱含處理的。為了讓這種轉換發生,我們需要將此函數引入到基本上所有編譯過的 recipe 中。這將分階段完成,首先針對單次遷移,然後附加到 conda-forge 中*所有*正在進行的遷移。
piggyback migrator 的邏輯試圖正確處理大多數情況,但不可能涵蓋所有邊角情況。至於所有 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 知識庫中的維護者文件。有關更多詳細資訊,請參閱此issue。