簡體   English   中英

除非必要,否則如何避免使用 conda-forge 包?

[英]How to avoid using conda-forge packages unless necessary?

從 conda-forge 安裝單個軟件包時,我遇到了一個小而煩人的 conda 問題。 通常我會運行這樣的東西:

conda install -c conda-forge somepackage

這具有使用 conda-forge 頻繁更新其他軟件包的效果:幾乎總是 ca-certificates、certifi 和 openssl; 有時像 python、numpy 等主要軟件包(全部來自 conda-forge)。 我懷疑這些更新並不是絕對必要的; 這些包使用一些邏輯按照“為了安裝 somepackage 的最新版本,我需要 python>=3.8,但當前 python 是 3.7;我可以使用 conda-forge,所以我會得到最新的 python來自 conda-forge,它比默認的更新”。

我想要完成的是:安裝 somepackage 的任何版本(不一定是最新的),同時盡可能少地從 conda-forge 安裝。 特別是,如果在保留已安裝的 package 和升級之間進行選擇,我總是想保留; 如果在默認通道和 conda-forge 之間有選擇,我總是想要默認(即使這些選擇導致我嘗試安裝的新軟件包的舊版本和/或它們的新依賴項 - 但不是如果它們導致無法安裝)。

我該如何做到這一點?

我如何告訴 conda“不要升級依賴項”

可以使用conda install --freeze-installed PACKAGE...文檔)來防止 conda 更新已安裝的軟件包。 然而,這似乎並不能阻止在aggressive_update_packages配置的 Aggressive_update_packages 鍵下更新包。 默認包有ca-certificatescertifiopenssl (見默認配置)。 可以檢查自己的配置

conda config --show aggressive_update_packages

安裝 somepackage 的任何版本(不一定是最新的),同時盡可能少地從 conda-forge 安裝

根據關於管理頻道的 conda 文檔,可以通過將conda-forge頻道放在頻道列表的底部並在 conda 的配置中設置channel_priority: strict來做到這一點。

在嚴格通道優先級下,如果具有相同名稱的 package 出現在較高優先級通道中,則不考慮較低優先級通道中的包。

“管理頻道”頁面建議將 strict 設置為默認值,並表示 conda 5.x 將設置 strict 作為channel_priority的默認值。

可以將以下內容寫入他們的~/.condarc文件:

channel_priority: strict
channels:
  - defaults
  - conda-forge

但是,如果在conda config中使用-c/--channel選項,則該通道將優先於任何其他通道。 因此,如果一個人如上所述設置他們的 conda 配置但使用conda install -c conda-forge numpy ,那么numpy將從 conda conda-forge forge 安裝。

一般來說,我贊同@jakub 回答中的結論:定義一個合理的全局通道優先級,並盡量避免通過--channel|-c參數使用臨時規范。

還有一些其他選項可能值得指出:

  1. 指定特定的 package 應該來自給定的通道

     conda install conda-forge::somepackage

    這不會改變通道優先級。

  2. install命令中明確列出通道優先級:

     conda install -c defaults -c conda-forge somepackage

    它將默認設置放在首位。

  3. 通過 YAML 文件定義和操作環境。 YAML 包含一個通道部分,因此您可以明確說明優先級。 如果您在環境中需要新的 package,可以將其添加到 YAML - 比如說env.yaml - 並且可以將編輯轉移到環境中

     conda env update -f env.yaml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM