我有一个在 Ubuntu 上运行的 Python 脚本。脚本使用以下命令获取所有已安装的 apt 包:
apt_cache = apt.cache.Cache()
我想获取每个已安装软件包的存储库名称。虽然我期望看到xenial/主页,xenial/宇宙,xenial-更新/主要等等,有些包有现在/现在作为存储库名称。
('linux-headers-generic', [<Origin component:'now' archive:'now' origin:'' label:'' site:'' isTrusted:False>])
大多数其他包如下:
('zip', [<Origin component:'main' archive:'xenial' origin:'Ubuntu' label:'Ubuntu' site:'de.archive.ubuntu.com' isTrusted:True>, <Origin component:'now' archive:'now' origin:'' label:'' site:'' isTrusted:False>])
现在这里的意义是什么?
答案1
仔细研究源代码,版本now
来自dpkgstatus
文件,其中不包括软件包的原始来源。因此,您将看到now
当前安装的任何软件包的带有存档的版本。您还可以在 的输出中看到这一点apt-cache policy
:
$ apt-cache policy
Package files:
100 /var/lib/dpkg/status
release a=now
...
例如:
$ apt-cache policy apt
apt:
Installed: 1.2.25
Candidate: 1.2.25
Version table:
*** 1.2.25 500
500 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
100 /var/lib/dpkg/status
安装的版本将在 API 中具有以下来源:
<Origin component:'main' archive:'xenial-updates' origin:'Ubuntu' label:'Ubuntu' site:'jp.archive.ubuntu.com' isTrusted:True>
<Origin component:'now' archive:'now' origin:'' label:'' site:'' isTrusted:False>
但是,如果您获取的版本为now
唯一来源,则意味着apt
无法在任何来源中找到它。这可能发生在:
- 已安装的版本不再存在于任何源中(是时候更新了!)
- 使用 deb 文件安装的软件包,但存储库中没有相应的软件包
- 从随后被禁用的源安装的软件包