“不可用,但被另一个包引用” - 找到该包

“不可用,但被另一个包引用” - 找到该包

Ubuntu 用户(或其他使用 apt 包管理工具的发行版)遇到以下错误并不罕见:

user@box ~ $ sudo apt install x
[sudo] password for user: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package x is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'x' has no installation candidate

在各种 Stack Exchange 网站上都已经提出了几个与此相关的问题,例如软件包 network-manager-openvpn 不可用在 Ask Ubuntu 上,但这些一般都是关于尽管出现错误,如何获取特定的包。

我发现没有一个包不能简单地(尽管并不总是容易)找到,通过确定它是否仍然分布,以及在哪个存储库下,并确保存储库在 sources.list 中,或者在最坏的情况下,下载 .deb 文件或源文件进行编译。

所以我的问题比较笼统,虽然我猜测它的答案相当简单,因此没有什么令人兴奋的,但我想不出如何通过传统的搜索引擎方法找到它,所以我转向 Ask Ubuntu。

是否有一个命令或选项可以用来确定哪些包引用了丢失的包?

答案1

有时发生这种情况是因为 APT 根本不知道您在说什么,但可以通过运行以下命令解决:

sudo apt-get update

运行此程序后,错误通常会消失,因为apt知道apt-get如何执行我现在要求的操作。

答案2

您可以使用 apt-cache 搜索软件包:

apt-cache search x

这将输出以某种方式引用 x 的所有包。

答案3

您可以运行此命令来查看包的所有反向依赖关系(替换PACKAGENAME为包名称):

apt-cache showpkg PACKAGENAME

什么是反向依赖?如果包 X 依赖于包 Y,则 Y 是 X 的依赖项,而 X 是 Y 的反向依赖项。

尝试通过运行删除一些反向依赖项sudo apt remove NAME

您可能还想尝试删除不再可用的包的所有配置:

sudo apt purge PACKAGENAME

答案4

根据以往的经验,通常:

  • 使用 进行子字符串包搜索apt search有时可能是一个可行的选择,但也有可能包名称不相关、违反直觉或包含中间字符,导致搜索过程无果。在这种情况下,您可以在所需包或库的官方存储库中搜索相应的名称,通常可以在包自述文件或手册中方便地引用它们。
  • 您也可能正在尝试安装一个命令(无论它是二进制文件还是可执行文件)或包含在另一个元包或库中的模块,在这种情况下apt-file search可能会派上用场。

但是,如果软件包在官方存储库中通常以任何形式不可用,那么作为最后的手段,您可以选择寻找一个社区驱动的存储库,即提供该软件的 PPA,手动安装 deb(祈祷有可用、可安装和兼容的依赖项)或自己编译。

相关内容