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 。但是为什么我不能一次更新所有这些?

原文由 Wang 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

TL;DR: 依赖冲突: 更新一个 需要 (根据它的要求) 降级另一个

你说的对:

 conda update --all

实际上是要走的路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-dependenciesforce -command 来实现。 但这 只是为了解决问题,绝对不是普通用户案例!


1如果您确实想要更新您的安装包,而您通常 _不会这样做_。在基本环境中运行的命令将更新其中的包,但通常您应该使用虚拟环境( conda create -n myenv 然后 conda activate myenv )。在这样的环境中执行 conda update --all 会更新这个环境 的包。然而,由于基础环境也是一个环境,所以答案以同样的方式适用于这两种情况。

原文由 Mayou36 发布,翻译遵循 CC BY-SA 4.0 许可协议

更准确地回答这个问题:

conda(对于 miniconda 对于 Anaconda 是 conda)更新所有但仅在包的特定版本内 -> 主要和次要。这就是范例。

在文档中,您会发现“注意:Conda 更新到其系列中的最高版本,因此 Python 2.7 更新到 2.x 系列中可用的最高版本,3.6 更新到 3.x 系列中可用的最高版本。” 文件

如果王不给出可复现的例子,只能辅助。例如,这真的是他想要更新的虚拟环境吗?或者 Wang 可以得到他/她想要的东西吗?

 conda update -n ENVIRONMENT --all

*请在执行“update –all”之前阅读文档!这不会自然导致所有包的更新。因为 conda 会尝试解决您环境中所有包之间的依赖关系,这可能会导致包降级而不会出现警告。


如果您只想更新几乎所有内容,则可以创建一个 pin 文件

echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned

在运行更新之前。 conda 问题未固定

如果稍后您想忽略环境中的文件以进行更新,您可以执行以下操作:

 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

康达配置


更新:

目前我会使用 mamba (或 micromamba)作为 conda pkg-manager 的替代品


更新:

因为 conda 的想法很好,但它在复杂环境中效果不佳,我个人更喜欢组合 nix-shell (或 lorri )和 poetry [作为高级 pip/conda .-)]( 介绍 poetry2nix )。

或者你可以使用 nixmach-nix (你只需要你的需求文件。它最好地解决和构建环境。


在 Linux / macOS 上,你可以像这样使用 nix

 nix-env -iA nixpkgs.python37

进入具有例如 Python3.7 的环境(确保您可以更改版本)

或者作为一个非常好的 Python(高级)环境,你可以使用 mach-nix (with nix),比如

mach-nix env ./env -r requirements.txt

(甚至支持 conda [但目前处于测试阶段])

或者通过 api 之类的

nix-shell -p nixFlakes --run "nix run github:davhau/mach-nix#with.ipython.pandas.seaborn.bokeh.scikit-learn "


最后,如果您真的需要使用由于其依赖性而不兼容的包,则可以使用 NixOS/nix-pkgs 等技术。

原文由 InLaw 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题