安装软件时如何找到依赖项?

安装软件时如何找到依赖项?

在软件安装教程中,总是会列出一长串的依赖项。他们如何找到这些依赖项?

例如,我在一台全新的 Ubuntu 服务器上开始操作,按照说明安装 rvm。它们提供了类似以下内容的内容:

sudo apt-get install git-core libreadline5 libncurses5-dev libreadline5-dev build-essential zlib1g-dev libssl-dev libpcre3-dev libxml2-dev libxslt-dev;

我只是想了解他们如何找到所有这些依赖项。复制和粘贴是可行的,但我认为理解它更重要。

答案1

通常 apt 会为您完成该操作。如果您尝试安装具有未满足依赖关系的二进制包,apt 会告诉您缺少哪些依赖关系,并请求您允许安装它们。

大多数源发行版都会在 README 文件中告诉您 -dev 依赖项是什么。

答案2

每个包都带有其自己的依赖项列表。对于德布斯,Ubuntu 使用的,您可以执行以下操作:-

[andys@daedalus ~]$ apt-cache depends git-core
git-core
  Depends: git

软件包的依赖项在软件包构建时指定。其中一些由软件包维护者(负责构建软件包的人),还有一些在构建软件包时自动确定。如果您下载 Debian 源包并查看文件debian/control,您会看到许多行,如Depends:Conflicts:Replaces:等。

那么,回到示例 -git-core仅依赖于一个包,即gitgit可能是某种元包,而元包又具有大量依赖项,以确保安装了运行 git 所需的所有包 - 而不仅仅是满足一个包的依赖项。如果我们查看包git:-

[andys@daedalus ~]$ apt-cache depends git
git
  Depends: libc6
  Depends: libcurl3-gnutls
  <...snip...>
  Suggests: git-cvs
  Suggests: git-svn
  Suggests: git-email
  <...snip...>
  Recommends: rsync
  <...snip...>
  Conflicts: git-core
  <...snip...>
  Breaks: stgit
  Breaks: stgit-contrib
  Replaces: <cogito>
  Replaces: git-core

...你会发现它git本身还有进一步的依赖关系。更复杂的是,除了需要安装另一个包之外,还有不同类型的依赖关系……

  • 冲突- 此软件包与另一个软件包冲突,如果不卸载此软件包,您可能无法安装冲突的软件包,反之亦然。在本例中,git与 冲突git-core。在我的计算机上,该git-core软件包被标记为过时的,这可能就是为什么将其列在这里的原因。
  • 休息- 此软件包会破坏另一个软件包,安装此软件包(尽管可能不需要卸载将被破坏的软件包)会导致该软件包安装的软件出现问题。再次查看我们的示例,一旦安装,stgitstgit-contrib软件包将被视为已破坏。git
  • 替换- 此软件包替换了另一个软件包,这意味着另一个软件包已过时,可能可以卸载。此git-core软件包再次出现在这里。

还有“软”依赖类型,例如建议建议,但不是必需的由你正在安装的软件包决定,但受到推崇的或者建议,顾名思义。再次查看示例,建议和推荐的软件包是 git 的附加组件,或不直接相关的工具,可以使使用更容易。

综上所述,您使用的包管理器将首先从您要求其安装的包开始,然后查找其依赖项,然后查找这些包的任何依赖项,依此类推。它还将检查与请求的包或其依赖项发生冲突、破坏或替换的包。一旦它找到可以满足您原始请求的方法,它将继续安装。

不同的包管理器有不同的方法来实现这一点依赖解析例如apt-getaptitudedselect本质上都做同样的事情,但它们做出决定的方式不同。您可能会发现aptitudedselect会很乐意向您介绍一种安装包的方法,而apt-get却不能。

如果你有兴趣了解更多关于 Debian 软件包的信息,请查看Debian 新维护者指南,其中详细介绍了 debs 的一些内容。

相关内容