我知道这个问题之前有人问过,但请听我说完。所以我想安装 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.
答案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
它总是选择第一个。