[英]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-certificates
、 certifi
和openssl
(見默認配置)。 可以檢查自己的配置
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
參數使用臨時規范。
還有一些其他選項可能值得指出:
指定特定的 package 應該來自給定的通道
conda install conda-forge::somepackage
這不會改變通道優先級。
在install
命令中明確列出通道優先級:
conda install -c defaults -c conda-forge somepackage
它將默認設置放在首位。
通過 YAML 文件定義和操作環境。 YAML 包含一個通道部分,因此您可以明確說明優先級。 如果您在環境中需要新的 package,可以將其添加到 YAML - 比如說env.yaml
- 並且可以將編輯轉移到環境中
conda env update -f env.yaml
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.