Apt 错误地猜测了软件包名称,而不是给出错误

Apt 错误地猜测了软件包名称,而不是给出错误

我尝试过本指南在我的系统上安装 Python 3.10。我运行了添加 PPA 的命令,执行了apt update,然后运行了apt install python3.10

当我收到这条信息时我非常惊讶:

Note, selecting 'postgresql-plpython3-10' for regex 'python3.10'
The following additional packages will be installed:
  postgresql-10 postgresql-client-10 postgresql-client-common postgresql-common
Suggested packages:
  locales-all postgresql-doc-10
The following NEW packages will be installed:
  postgresql-10 postgresql-client-10 postgresql-client-common postgresql-common postgresql-plpython3-10
0 upgraded, 5 newly installed, 0 to remove and 60 not upgraded.
Need to get 4,958 kB of archives.
After this operation, 19.4 MB of additional disk space will be used.

后来我意识到这是因为我的互联网在添加 PPA 时暂时断线了,操作随后失败了。添加 PPA 解决了这个问题,现在我得到了正确的选项:

The following NEW packages will be installed:
  libpython3.10-minimal libpython3.10-stdlib python3.10 python3.10-minimal

结果的差异让我措手不及。考虑到我一生中超过 50% 的时间都在运行 Linux 发行版,因此被这样的事情打个措手不及的感觉相当糟糕。运行完全相同的命令,我不再被提供 Postgres。我非常担心它一开始就提供 Postgres。我过去曾帮助朋友安装 Ubuntu,在他们获得经验之前,大量的文字会让他们感到困惑和迷茫。我可以想象有人最终会在他们的系统上运行一个不安全的、未受影响的数据库,等待被用作攻击媒介。

我的问题是:

  • 为什么 apt try 会牵着我的手,而不是简单地说“这不存在”?(我的意思是,我明白了,正则表达式匹配,但为什么盲目地使用正则表达式?我之前没有注意到它提到过正则表达式,除非我添加了类似*) 的内容
  • 我可以禁用这个行为吗?

答案1

看来你在这个特定实例中相当不走运,因为“python3.10”中的“。”触发了 apt 将其解释为正则表达式,然后它被解释为“任何字符”的替代,因此匹配“postgresql-plpython3-10”,但不匹配“python3.10”,因为该包暂时不可用。

在这种情况下,使用“python3 \.10”可以解决这种情况,因为当 apt 告诉您它选择了什么并询问您是否要继续时,只需取消即可。

看起来,在指定包名称时,您无法关闭 apt 对正则表达式的支持,除非不使用特殊字符(或者如果使用则将其转义)。

apt-get 也有这种行为,并且 aptitude 支持其自己的表达式语法。

导致此问题的原因之一是 Ubuntu 中有一个软件包名称带有“。”,这是有效的,但该字符恰好也会触发将软件包名称解释为正则表达式。

答案2

自 2023 年 6 月 6 日起,接受答案中指定的解决方法将不再适用于 Ubuntu 18 系统。

https://github.com/deadsnakes/issues/issues/251

deadsnakes 的维护者决定删除所有 Ubuntu 18 软件包,而不是让它们原封不动地存在,而不提供新的软件包。这是一个令人失望的决定,因为 Ubuntu 18 仍然在 ESM 支持中,并且截至 5 月 31 日的所有现有基础软件包更新仍可正常下载和应用。只是新的安全更新需要付费的 ESM 订阅。deadsnakes 并非如此。

相关内容