我试过 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
。但是为什么我不能一次更新所有这些?
原文由 Wang 发布,翻译遵循 CC BY-SA 4.0 许可协议
TL;DR: 依赖冲突: 更新一个 需要 (根据它的要求) 降级另一个
你说的对:
实际上是要走的路1 。 Conda 总是尝试将软件包升级到该系列中的最新版本(例如 Python 2.x 或 3.x)。
依赖冲突
但是可能存在依赖冲突(这会阻止进一步升级)。如果它们发生,Conda 通常会非常明确地发出警告。
例如 X 要求 Y <5.0,所以 Y 永远不会 >= 5.0
这就是为什么您“不能”全部升级它们的原因。
正在解决
补充一点:也许它可以工作,但在 conda 中没有使用 Y > 5.0 的更新版本的 X。可以使用 pip 安装,因为 pip 中提供了更多软件包。但是请注意,如果存在依赖冲突,pip 也会安装软件包,并且它通常会破坏您的 conda 环境,因为您无法再可靠地使用 conda 进行安装。如果您这样做,请作为最后的手段,并且在所有软件包都安装了 conda 之后。这是一个黑客。
您可以尝试的一种安全方法是在升级时添加 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
会更新这个环境 中 的包。然而,由于基础环境也是一个环境,所以答案以同样的方式适用于这两种情况。