【问题标题】:What is the difference between conda install and conda update?conda install 和 conda update 有什么区别?
【发布时间】:2018-09-07 17:09:36
【问题描述】:

conda installconda update 有什么区别?我浏览了文档,没有发现任何明显的区别。


文档说:

来自conda install

Conda 尝试安装请求的最新版本 包。为此,它可能会更新一些包 已安装,或安装其他软件包。要防止现有软件包更新,请使用 --no-update-deps 选项。这可能会迫使 conda 安装旧版本的 请求的包,并且不会阻止安装额外的依赖包。

来自conda update

Conda 尝试安装请求的最新版本 包。为此,它可能会更新一些包 已安装,或安装其他软件包。要防止现有软件包更新,请使用 --no-update-deps 选项。这可能会迫使 conda 安装旧版本的 请求的包,并且不会阻止安装额外的依赖包。

【问题讨论】:

  • install 安装一个新包,update 将以前安装的包更新到最新版本,不是吗?
  • 都提到他们将更新到最新版本。
  • 但前提不同。 update 预计该软件包已安装。如果不是,update 将失败。您首先执行install(一次),然后执行update(根据需要执行多次)。
  • 啊.....好吧,这就是区别。
  • 有趣的是,update 的文档并没有说明这一点。 (我试过了,你是对的,如果我尝试更新一个未安装的包,我会得到一个 PackageNotInstalledError。)我猜它们取决于 installupdate 的字典含义含义,而没有明确表示说明行为。

标签: python anaconda conda


【解决方案1】:

这正是您提供的文档所说的。对于 conda 安装:

将软件包列表安装到指定的 conda 环境中。

对于 conda 更新:

将 conda 包更新到最新的兼容版本。

【讨论】:

  • 这并没有理解差异的细微差别。 (见 DYZ 的评论)
  • 我不同意。 updateinstall 这两个词都是通用术语,我认为常识知道它们之间的区别。
  • 你不能依赖软件来遵循常识。
  • 同意,但可以与文档相关。
【解决方案2】:

在问题中引用的文档中的文本的上下文中

...Conda 尝试安装所请求软件包的最新版本....

似乎很重要的一点是,文档并没有完全清楚地说明安装和更新之间的区别。文档在没有阐明条件的情况下对安装的内容有相同的解释这一事实肯定有点令人困惑(至少对我而言)。

安装和更新之间的隐含区别不仅在于如果您尝试更新不存在的包时会出现错误(问题的 cmets 中提到的内容),而且还在于副作用(处理依赖项)对于 installupdate 是不同的。

一个真实世界的例子:

(base)  535> conda install -d sphinx
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /data/anaconda3

  added / updated specs:
    - sphinx


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    sphinx-3.0.3               |             py_0         1.1 MB
    ------------------------------------------------------------
                                           Total:         1.1 MB

The following packages will be UPDATED:

  sphinx                                         2.4.0-py_0 --> 3.0.3-py_0

同时更新导致

(base)  536> conda update -d sphinx
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /data/anasynth_nonbp/anaconda3

  added / updated specs:
    - sphinx


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    astroid-2.4.1              |           py36_0         279 KB
...
    sphinx-3.0.3               |             py_0         1.1 MB
...
    zipp-3.1.0                 |             py_0          13 KB
    ------------------------------------------------------------
                                           Total:        39.8 MB

The following NEW packages will be INSTALLED:

  importlib-metadata pkgs/main/linux-64::importlib-metadata-1.6.0-py36_0
  prompt-toolkit     pkgs/main/noarch::prompt-toolkit-3.0.4-py_0
  toml               pkgs/main/linux-64::toml-0.10.0-py36h28b3542_0

The following packages will be REMOVED:

  asn1crypto-1.3.0-py36_0

The following packages will be UPDATED:

  astroid                                      2.3.3-py36_0 --> 2.4.1-py36_0
...
  sphinx                                         2.4.0-py_0 --> 3.0.3-py_0
...
  zipp                                           2.2.0-py_0 --> 3.1.0-py_0

如果没有对最后的细节进行调查,似乎可以总结如下(最后使用conda 4.8.3 测试):

conda 安装

安装请求包的最新版本,对已安装的包进行最小的更改

conda 更新

如果包存在,将更新到最新版本,否则将给出错误。此外,它还更新作为参数列出的包的所有依赖项。即使参数中的包已经是最新版本,conda update 也会更新这些。

【讨论】:

  • 至少在 conda 4.9.0 中,conda update 将仅更新非叶子(未显式安装)的 deps。 conda update --update-deps 也会更新叶子。
  • 也许还值得指出的是,conda install 可以采用版本字符串 (conda install mypackage=1.1) 但 conda update 不能。指定版本字符串会安装该特定版本,因此conda install 也可用于降级包。
猜你喜欢
  • 1970-01-01
  • 2021-01-08
  • 2020-10-26
  • 2015-07-14
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
相关资源
最近更新 更多