跳到主要內容

Clang 現在可用於所有平台的編譯器

我們每個平台的編譯器堆疊通常使用該平台的「預設」編譯器,例如,請參閱 此處

實際上,這表示

c_compiler:
- gcc # [linux]
- clang # [osx]
- vs2019 # [win]
cxx_compiler:
- gxx # [linux]
- clangxx # [osx]
- vs2019 # [win]

是 C/C++ 編譯器的唯一可能選擇。

最近,我們完成了初步支援 clang / clangxx 作為 C/C++ 編譯器,也適用於 Linux 和 Windows,從 clang 18 開始。這仍然非常新,因此可能存在錯誤,我們要求除非有令人信服的理由,否則不要更改 feedstock 上的預設編譯器。

在任何情況下,現在可以在 recipe/conda_build_config.yaml 中使用以下配置(請注意缺少平台選擇器)

c_compiler:
- clang
c_compiler_version:
- 18
cxx_compiler:
- clangxx
cxx_compiler_version:
- 18

新的 conda-forge.org

您可能已經注意到,在過去幾個月中,我們一直在更改 conda-forge.org 網站的不同部分。閱讀更多內容以了解我們更改了什麼、它是如何運作的以及如何貢獻。

stdlib("c") 即將進行遷移

幾乎從 conda-forge 成立以來,我們的 C 標準函式庫 ("stdlib") 的基準版本就沒有改變。這個函式庫帶來了額外的複雜性,因為它是作業系統的重要組成部分,也是 conda/mamba/etc. 無法安全運送的少數幾件事之一。

隨著生態系統的發展,許多套件開始需要更新的基準版本,我們需要在某個時候跟進。但是,為了避免在舊系統上造成使用者中斷,我們需要建立基礎架構,讓我們的套件具有足夠精確的中繼資料,以便 conda 可以避免在舊系統上安裝需要較新 stdlib 的套件。

經過 conda-forge 利益相關者之間的多次討論,我們得出的解決方案是引入新的 Jinja2 函數 {{ stdlib("c") }},這反映了給定的 recipe 需要 C stdlib。使這種關係明確化將使其容易正確反映每個 feedstock 以及我們的全域釘選中對較新 stdlib 版本的需求。

到目前為止,stdlib 是作為編譯器堆疊的一部分隱含處理的。為了讓這種轉換發生,我們需要將此函數引入到基本上所有已編譯的 recipe 中。這將分階段完成,首先進行單一遷移,然後附加到 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 知識庫中的維護者文件。如需更多詳細資訊,請參閱此 問題

在 2024 年 4 月 22 日停止支援 CUDA 11.2

Conda-forge 正在停止支援 CUDA 11.2。

CUDA 11 系列的最新版本是 CUDA 11.8。目前,conda-forge 已良好支援 CUDA 11.8+。這是執行廣泛遷移工作以將 conda-forge feedstock 升級到較新 CUDA 版本的结果。

CUDA 11.8 套件可以安裝並在 CUDA 11.2 支援的相同硬體上執行。此外,CUDA 11.8 套件針對較新硬體進行了最佳化,而 CUDA 11.2 套件沒有。因此,使用者升級到 CUDA 11.8 是有益的。

少數看似未維護的 feedstock 尚未遷移。這些 feedstock 已提出問題,以提醒維護者注意此棄用計畫。在更新之前,使用者仍然可以安裝他們之前產生的 CUDA 11.2 套件。這些應該會繼續運作。但是,如果不更新到 CUDA 11.8,將無法重建這些套件。

若要將較舊的 feedstock 升級到 CUDA 11.8,只需重新渲染即可。如果 recipe 有 skip 或其他邏輯阻止这种情况發生,只需移除此邏輯並重新渲染以新增 CUDA 11.8。

日期已發送,以確保維護者有完整的工作週來執行任何剩餘的更新,以移動到 CUDA 11.8+。在 2024 年 5 月,NVIDIA 計劃刪除 conda-forge 一直用於建置 CUDA 11.2 的 CUDA 11.2 Docker 映像檔。因此,conda-forge 將無法更新 CUDA 11.2 Docker 映像檔,這將使其維護更加困難。鼓勵 Feedstock 維護者在那之前更新(如果他們尚未這樣做)。

Rust 1.75 需要設定較新的 MACOSX_DEPLOYMENT_TARGET

隨著 rust 1.75 的發布,我們現在要求將最小 MACOSX_DEPLOYMENT_TARGET 設定為至少 10.12。您可以通過將以下內容附加到 recipe/conda_build_config.yaml 來執行此操作

c_stdlib_version:       # [osx and x86]
- '10.12' # [osx and x86]

並在您的編譯器 jinja 旁邊新增 {{ stdlib("c") }} 作為 build 依賴項

  build:
- {{ compiler("rust") }}
- {{ stdlib("c") }}

注意:此條目已於 2024 年 4 月更新,以反映用於設定 MACOSX_DEPLOYMENT_TARGET 的新基礎架構,請參閱 此處

Python 3.12 遷移和預設 Python 3.11

隨著 Python 3.12 版本的臨近,我們已經開始為其重建套件。儘管目前還沒有正式的 Python 3.12 版本,但其候選版本將具有相同的 ABI。因此,使用候選版本建置的套件可以安全地用於後來的正式版本。為了支援在 conda-forge 上重建套件,同時確保 Python 候選版本不會最終出現在最終使用者的解決方案中,我們已將 Python 3.12.0rc2 和 rc3 版本上傳到 conda-forge/label/python_rc 頻道。python312 遷移在 feedstock 建置中將此頻道新增到 Python 3.12 矩陣條目中。在 Python 3.12 正式發布後,我們將調整遷移並再次移除頻道。然後(在重新渲染時),feedstock 將僅再次使用主要頻道。

總體而言,這種方法使我們能夠在 Python 3.12 正式發布當天為廣泛的套件提供 Python 3.12。同時,我們已停止 Python 3.11 遷移,並將其新增到 conda-forge 上的預設 Python 版本清單中。

將最低 MacOS 版本提升至 10.13

我們將把最低 MacOS 版本從 10.9(於 2013 年 10 月發布,自 2016 年 12 月起終止生命週期)提升至 10.13(於 2017 年 9 月發布,自 2020 年 12 月起終止生命週期)。我們能夠如此長時間支援 10.9 的主要原因是,conda-forge 能夠為 OSX 運送最新的 C++ 標準函式庫 libcxx,取代系統上 MacOS SDK 中存在的舊函式庫(至少從各自 conda 環境的角度來看)。

但是,生態系統中的幾個核心套件現在要求至少 10.13(或很快就會要求),這是我們無法規避的。這些套件包括 libcxx 版本 17.0 開始。此變更不會影響已發布的成品,但在不久的將來,所有 OSX 的新版本都將要求至少 10.13。此限制將通過 __osx 虛擬套件實施,但我們將如何實現這一目標的細節仍在制定中。只有 4.8.0 或更新版本的 conda 才具有此虛擬套件。如果您使用的系統 MacOS 版本早於 10.13,並且使用的 conda 版本早於 4.8.0,您需要將 conda 升級到至少 4.8.0 或將系統升級到至少 MacOS 10.13。

CentOS 6 的生命週期結束

您可能知道,我們已多次延遲棄用我們的 CentOS 6 建置系統 linux64 平台。我們現在已將正式棄用日期設定為 2024 年 6 月 30 日。此日期與 RedHat 為 RHEL 6 提供的 延長生命週期支援結束日期 相符。在此日期之後,我們預設針對 linux64 建置 CentOS 7 的套件。