如何在 apt-get 中安装建议的软件包

如何在 apt-get 中安装建议的软件包

我知道这个问题之前有人问过,但请听我说完。所以我想安装 screenlets。我运行了sudo apt-get install screenlets,结果如下:

The following extra packages will be installed:
  libart-2.0-2 libbonobo2-0 libbonobo2-common libbonoboui2-0 libbonoboui2-common libgnome2-0 libgnomecanvas2-0
  libgnomecanvas2-common libgnomeui-0 libgnomeui-common libtidy-0.99-0 python-beautifulsoup python-evolution
  python-feedparser python-gmenu python-gnome2 python-numpy python-pyorbit python-rsvg python-tz python-utidylib
  screenlets-pack-basic
Suggested packages:
  libbonobo2-bin python-gnome2-doc python-numpy-doc python-numpy-dbg python-nose python-dev gfortran
  python-pyorbit-dbg screenlets-pack-all python-dcop
Recommended packages:
  python-numeric python-gnome2-extras
The following NEW packages will be installed:
  libart-2.0-2 libbonobo2-0 libbonobo2-common libbonoboui2-0 libbonoboui2-common libgnome2-0 libgnomecanvas2-0
  libgnomecanvas2-common libgnomeui-0 libgnomeui-common libtidy-0.99-0 python-beautifulsoup python-evolution
  python-feedparser python-gmenu python-gnome2 python-numpy python-pyorbit python-rsvg python-tz python-utidylib
  screenlets screenlets-pack-basic
0 upgraded, 23 newly installed, 0 to remove and 2 not upgraded.

人们说默认会安装推荐的软件包,但它们显然不包含在将要安装的新软件包中。我还决定在安装中包含建议的软件包,因此我改为运行sudo apt-get --install-suggests install screenlets,但我得到了将要安装的新软件包的巨量列表;这个数字恰好是0 upgraded, 944 newly installed, 0 to remove and 2 not upgraded。难道我不应该只得到大约 10 个额外的软件包吗?

答案1

建议建议并不是一回事。

套餐A依靠如果为了运行 A 必须安装 B,则依赖于包 B。在某些情况下,A 不仅依赖于 B,还依赖于 B 的某个版本。在这种情况下,版本依赖性通常有一个下限,即 A 依赖于比某个指定版本更新的任何 B 版本。

套餐A建议包 B,如果包维护者判断,如果包 A 没有 B 所提供的功能,那么大多数用户就不会想要包 A。

套餐A建议如果 B 包含与 A 的功能相关(且通常会增强)的文件,则为包 B。

Debian GNU/Linux 常见问题解答了解详情。

默认情况下,apt-get安装推荐的软件包。

您的选项--install-suggests会添加建议的包及其建议的依赖项。

--install-suggests
    Consider suggested packages as a dependency for installing.
    Configuration Item: APT::Install-Suggests.

apt-get(8)

答案2

我发现了为什么受到推崇的我的问题中的软件包未包含在要安装的软件包中。这是因为这些推荐的软件包在存储库中不存在。我尝试安装一个随机软件包,我选择了sudo apt-get install googleearth-package。它没有显示推荐套餐部分(这意味着它们已经包含在要安装的新包部分中)。为了确认这一点,我运行了sudo apt-get --no-install-recommends install googleearth-package,果然推荐套餐部分显露出来。至于建议包,我想我不会使用,--install-suggests因为它只是安装建议的包和它们建议的包。

答案3

我还想要一种方法来安装所显示的建议软件包apt show,例如:

$ apt show python3
Package: python3
...
Suggests: python3-doc (>= 3.11.8-1), python3-tk (>= 3.11.8-1~), python3-venv (>= 3.11.8-1)
...

所以我写了一个 bash 函数:

apt-install-suggested() {
    local suggested=$(apt-cache show $1 | grep ^Suggests:  | sed 's/Suggests: //' | awk -F ', ' '{for(i=1;i<=NF;i++) print $i}' | cut -d ' ' -f 1 | xargs)
    apt install $1 $suggested $2
}

以下是使用 apt-3 预览版的最新 debian 测试的输出:(
这也适用于任何其他 debian / ubuntu 版本,但 apt-3 的输出更容易阅读)

$ apt-install-suggested python3
Installing:
  python3 python3-doc python3-tk python3-venv

Installing dependencies:
  blt               libpython3-stdlib     media-types
  ca-certificates   libpython3.11-minimal netbase
  fontconfig-config libpython3.11-stdlib  openssl
  fonts-dejavu-core libreadline8t64       python3-distutils
  fonts-dejavu-mono libsqlite3-0          python3-lib2to3
  javascript-common libtcl8.6             python3-minimal
  libbrotli1        libtk8.6              python3-pip-whl
  libbsd0           libx11-6              python3-setuptools-whl
  libexpat1         libx11-data           python3.11
  libfontconfig1    libxau6               python3.11-doc
  libfreetype6      libxcb1               python3.11-minimal
  libgpm2           libxdmcp6             python3.11-venv
  libjs-jquery      libxext6              readline-common
  libjs-underscore  libxft2               tk8.6-blt2.5
  libncursesw6      libxrender1           x11-common
  libpng16-16t64    libxss1

Suggested packages:
  blt-demo   | httpd tk8.6            python3-tk-dbg readline-doc
  apache2    gpm     python3-examples binutils
  | lighttpd tcl8.6  tix              binfmt-support

Summary:
  Upgrading: 0, Installing: 51, Removing: 0, Not Upgrading: 23
  Download size: 30.8 MB
  Space needed: 124 MB / 111 GB available

Continue? [Y/n]

您还可以运行apt-install-suggested python3 -y

如果你想永久使用此功能,只需将该功能添加到~/.bashrc

答案4

有一个选项--install-suggests。但是正如评论中所写,我发现这个选项由于其递归行为而不可用,它会带来大量你永远不想要的依赖关系。

我总是想要安装给定包的建议包,而不是安装任何包的建议包。

您可以看到给定包的建议包,如下所示:

apt show PACKAGE 2>&1 | grep ^Suggests:

此命令允许您仅根据给定包的建议来安装包:

apt show PACKAGES 2>&1 | sed -nr '/^(Suggests|Package): /{s///;s/( \|[^,]+)?,//g;p}' | xargs apt -y install

注意:如果包建议几个替代方案,pkg1 | pkg2它总是选择第一个。

相关内容