递归依赖性检查和反向依赖性检查有什么区别?

递归依赖性检查和反向依赖性检查有什么区别?

我对软件依赖的理解是,一个程序包可能需要安装其他包,称为依赖。随之而来的是类似树的结果。有时,包共享共同的依赖关系,但该包只需要安装一次。

                                        |套餐D
                  |套餐B--------->|
                  | |套餐E
套餐A -------->|
                  | |套餐F
                  |套餐C--------->|
                                        |套餐B

我最近发布AskUbuntu.com 上关于查找包的依赖关系的问题,所有执行此操作的方法都给了我不同的结果。原因是有些方法显然不仅仅列出了依赖关系,有些方法正在执行递归检查,有些方法正在执行反向检查。

反向依赖检查和递归依赖检查有什么区别?

编辑:

术语的引用。我第一次听到它们是在我发布的有关 APT 的主题的评论中,但它们在多个可用于执行依赖性检查的程序以及它们的联机帮助页中使用。

apt-cache rdepends 正在寻找反向依赖关系,我的脚本和 apt-rdepends 正在递归地寻找依赖关系。
r取决于包装
           rdepends 显示包所具有的每个反向依赖项的列表。
apt-rdepends - 执行类似于以下的递归依赖项列表
       apt 缓存

答案1

反向取决于

反向依赖意味着您需要依赖于给定包的包列表。

例子

$ apt-cache rdepends jetty
jetty
Reverse Depends:
  solr-jetty
  libjetty-java
  libjetty-extra-java
  libjetty-extra
  libini4j-java
  guacamole

递归依赖

使用诸如apt-rdepends显示给定包依赖于哪些包以及这些包还依赖于哪些包之类的工具。这是递归执行的,直到耗尽整个依赖树。

例子

$ apt-rdepends jetty | head -10
Reading package lists... Done
Building dependency tree       
Reading state information... Done
jetty
  Depends: adduser
  Depends: apache2-utils
  Depends: default-jre-headless
  Depends: java5-runtime-headless
  Depends: jsvc
  Depends: libjetty-java (>= 6.1.26-1ubuntu1)
adduser
  Depends: debconf
  Depends: debconf-2.0
...

上面你可以看到jetty依赖于 ,adduser而它本身又依赖于debconf

反向递归依赖

这显示了哪些包依赖于某个包,而该包又依赖于给定的包。这又是递归完成的。

例子

$ apt-rdepends --reverse jetty 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
jetty
  Reverse Depends: solr-jetty (>= 3.6.1+dfsg-0ubuntu2)
solr-jetty
  Reverse Depends: chef-solr (>= 10.12.0+dfsg-1)
chef-solr
  Reverse Depends: chef-expander (>= 10.12.0-1)
  Reverse Depends: chef-server-api (>= 10.12.0-1)
chef-expander
chef-server-api
  Reverse Depends: chef-server-webui (>= 10.12.0+dfsg-1)
chef-server-webui

再次在这里,当探索树时,列出jetty作为依赖项的第一个包是solr-jetty,而它又被列为 的依赖项chef-solr,等等。

依赖类型

这可能会有点令人困惑,但有多种依赖因素。查看手册页apt-rdepends

   -f, --follow=DEPENDS
        A comma-separated list of DEPENDS types to follow recursively. 
        By default, it only follows the Depends and PreDepends types.

        The possible values for DEPENDS are: Depends, PreDepends, Suggests,
        Recommends, Conflicts, Replaces, and Obsoletes.

        In --build-depends mode, the possible values are: Build-Depends, 
        Build-Depends-Indep, Build-Conflicts, Build-Conflicts-Indep.

相关内容