我在 Linux 上摆弄声音并尝试安装该软件包jackd
。这是返回内容的相关摘录apt
:
$ sudo apt install jackd
The following additional packages will be installed:
jackd2 jackd2-firewire libconfig++9v5 libffado2 libglibmm-2.4-1v5 libsigc++-2.0-0v5 libxml++2.6-2v5 python-dbus python-gi qjackctl
然后清除的结果:
$ sudo apt purge jackd
The following packages will be REMOVED:
jackd* qjackctl*
后续安装:
$ sudo apt install jackd
The following NEW packages will be installed:
jackd
- - - - - 编辑 - - - - -
进而 :
sudo apt autoremove
The following packages will be REMOVED:
libfwup1
(这是在安装 jackd 之前已经提到过的软件包)
----------编辑结束----------
从这个实验来看,apt
似乎并没有消除依赖关系。然而,qjackctl
除了我特别提到的包 ( ) 之外,清除还删除了另一个包 ( ) jackd
。
qjackctl
是守护进程相应GUI界面的包jackd
,我知道如果我不再需要它了jackd
。但是,从逻辑上讲,其他依赖项也已安装,因此:
- 为什么他们没有被卸载?
- 为什么被
qjackctl
卸载了? - 为什么
qjackctl
在第二次安装时没有获取?
仅有的线发现特定于有问题的包。
非常感谢你的帮助
PS:我刚刚安装完 Arch Linux 分区(旨在将来替换我的 Ubuntu 分区)。我pacman
现在还不是很熟悉。使用这个包管理器可以更好地管理这种行为吗? (更准确地说:不对称的操作和可预测的行为)
答案1
安装附加软件包是因为它们(可能是间接)依赖于jackd
:jackd2
直接依赖,其余依赖通过jackd2
.qjackctl
因为推荐而安装jackd2
,并且默认安装推荐的软件包。
具体来说,已安装包的依赖关系树如下:
jackd
└─ jackd2
├─ python-dbus
│ └─ python-gi (recommended)
├─ jackd2-firewire (recommended)
│ └─ libffado2
│ ├─ libconfig++9v5
│ ├─ libglibmm-2.4-1v5
│ │ └─ libsigc++-2.0-0v5
│ └─ libxml++2.6-2v5
└─ qjackctl (recommended)
两个附加依赖项不会影响安装步骤,但稍后会变得很重要:jackd2-firewire
depends onjackd2
和qjackctl
depends on jackd
。
后一个依赖项意味着当jackd2
被删除时,qjackctl
也必须被删除(如果没有严格的依赖项,则无法安装包)。其他软件包不依赖于jackd
,因此没有被删除;他们本来会被apt autoremove
,除了因为jackd2-firewire
依赖jackd2
,没有一个包变得不必要......(apt
不记得了具体是哪个包导致安装另一个软件包;autoremove
只检查自动安装的软件包以查看是否不再有任何东西依赖于它们。作为一个额外的变化,autoremove
认为建议足够重要以保持安装包。)
第二次安装时jackd
,apt
查看其依赖项,IE jackd2
或者jackd1
,注意到jackd2
已经安装,并停在那里;因此它没有注意到qjackctl
“缺失”,因为它是由 推荐的jackd2
,而不是jackd
它自己推荐的。
aptitude
一旦删除了依赖的包,就会删除不必要的包,无需单独的autoremove
步骤;您可能会发现它更容易使用。命令与 的相同apt
;它还有一个基于文本的全屏用户界面,我发现这非常有用。