我尝试了conda search--outdated,其中有很多过时的软件包,例如scipy是0.17.1,但最新的是0.18.0。但是,当我这样做时conda update --all。它不会更新任何软件包。
conda search--outdated
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。但是,为什么我不能一口气更新它们呢?
conda update scipy
TL; DR: 依赖项冲突: 更新一个 要求 (根据要求) 以降级另一个
你是对的:
实际上是要走的路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也会在此位置搜索可用的软件包。
-c conda- forge
考虑您的更新 :您 可以分别 升级它们,但是这样做不仅包括升级,还包括其他软件包的降级。说,添加到上面的示例中:
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这样的环境里将更新包 内 这样的环境。但是,由于基本环境也是环境,因此答案以相同的方式适用于两种情况。
conda create -n myenv
conda activate myenv