问题:anaconda更新所有可能的软件包吗?
我尝试了conda search --outdated
,其中有很多过时的软件包,例如scipy是0.17.1,但最新的是0.18.0。但是,当我这样做时conda update --all
。它不会更新任何软件包。
更新1
conda update --all --alt-hint
Fetching package metadata .......
Solving package specifications: ..........
# All requested packages already installed.
# packages in environment at /home/user/opt/anaconda2:
#
更新2
我可以分别更新那些软件包。我能做conda update scipy
。但是,为什么我不能一口气更新它们呢?
回答 0
TL; DR:依赖项冲突:更新一个要求 (根据要求)以降级另一个
你是对的:
conda update --all
实际上是要走的路1。Conda始终尝试将软件包升级到该系列的最新版本(例如Python 2.x或3.x)。
依赖冲突
但是有可能存在依赖性冲突(这会阻止进一步升级)。如果发生,康达通常会非常明确地发出警告。
例如X要求Y <5.0,因此Y永远不会> = 5.0
因此,您无法“全部”升级它们。
解决
补充说明:也许它可以工作,但是conda中没有使用Y> 5.0的X的较新版本。可以使用pip进行安装,因为pip中提供了更多软件包。但是请注意,如果存在依赖冲突,pip也会安装软件包,并且通常会破坏conda环境,因为您无法再可靠地使用conda进行安装。如果这样做,请在所有软件包都已安装conda之后作为最后的方法。这是一个hack。
您可以尝试的一种安全方法是在升级时将conda-forge作为渠道添加(-c conda-forge
作为标志添加),或者如果确实需要此新版本,则可以找到包含软件包的任何其他渠道。这样,conda也会在此位置搜索可用的软件包。
考虑您的更新:您可以分别升级它们,但是这样做不仅包括升级,而且还包括其他软件包的降级。说,添加到上面的示例中:
X> 2.0要求Y <5.0,X <2.0要求Y> 5.0
因此,将Y> 5.0升级意味着将X降级到<2.0,反之亦然。
(当然,这是一个教学示例,但实际上是相同的,通常只是具有更复杂的依赖性和子依赖性)
因此,您仍然无法通过单独进行升级来全部升级它们。依赖关系是无法令人满意的,因此早晚要进行升级,升级将再次降级已经升级的软件包。或者破坏软件包的兼容性(通常您不希望这样做!),这只能通过显式调用ignore-dependencies和force -command来实现。但是,这仅仅是破解围绕问题的方式,绝对不是正常用户的情况下!
1如果您实际上要更新安装软件包,而通常不这样做。在基本环境中运行的命令将以此更新软件包,但是通常您应该使用虚拟环境(conda create -n myenv
然后使用conda activate myenv
)。执行conda update --all
这样的环境里将更新包内这样的环境。但是,由于基本环境也是环境,因此答案以相同的方式适用于两种情况。
回答 1
为了更精确地回答这个问题:
conda(对于anaconda而言,是miniconda的conda),仅在特定版本的软件包-> major和minor中更新所有内容。这就是范例。
在文档中,您会发现“注意:Conda更新到其系列中的最高版本,因此Python 2.7更新到了2.x系列中的最高版本,而3.6更新到了3.x系列中的最高版本。” doc
如果王先生没有提供可复制的例子,那么只能提供帮助。例如,这真的是他想要更新的虚拟环境吗?或者Wang是否可以得到他/她想要的东西
conda update -n ENVIRONMENT --all
*请在执行“ update –all”之前阅读文档!这自然不会导致所有软件包的更新。因为conda尝试解决环境中所有软件包之间的依赖关系,所以这可能导致DOWNGRADED软件包而没有警告。
如果您只想更新几乎所有内容,则可以创建一个密码文件
echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned
在运行更新之前。
如果以后要忽略环境中的文件进行更新,则可以执行以下操作:
conda update --all --no-pin
您不应该更新–all。但是,如果需要,您可以节省在克隆环境中进行测试。
第一步应该始终是备份当前规范:
conda list -n py35 --explicit
(但即使如此,也不总是总是有指向源的链接,例如jupyterlab扩展)
接下来,您可以克隆和更新:
conda create -n py356 --clone py35
conda activate py356
conda config --set pip_interop_enabled True # for conda>=4.6
conda update --all
更新:
因为conda的想法很好,但是在复杂的环境中效果不是很好,所以我个人更喜欢nix-shell (or lorri) and poetry
[as as superior pip / conda .-)](intro poetry2nix)的组合。
最后,如果您确实需要使用由于依赖关系而导致不兼容的软件包,则可以使用NixOS / nix-pkgs之类的技术。
回答 2
想象一下软件包的依赖关系图,当软件包的数量增加时,在升级/添加软件包时遇到冲突的机会就会大大增加。为避免这种情况,只需在Anaconda中创建一个新环境。
节俭,只安装您需要的东西。对我来说,我在新环境中安装了以下软件包:
- 大熊猫
- scikit学习
- matplotlib
- 笔记本
- 凯拉斯
我总共有84个包裹。
回答 3
如果在MS Windows中工作,则可以使用Anaconda导航器。单击环境,在下拉框中默认情况下为“已安装”。您可以选择“可更新”并从此处开始
回答 4
更新我使用的所有可能的软件包 conda update --update-all
有用!
回答 5
我用conda
和解决了这个问题pip
。
首先,我运行:
conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5
之后,我打开了cmd并运行以下代码
pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5
最后,您应该matplotlib
使用以下代码在pip中进行安装:pip install matplotlib