source.list.d 中来自 2 个不同 PPA 的相同包;如何从一个特定的 PPA 强制安装?

s.k*_*s.k 6 apt ppa

问题:

假设我有一个软件的 PPA(例如 Blender;http ://ppa.launchpad.net/thomas-schiex/blender/ubuntu),由于某些原因,它包含一个 Python3.6 版本。

我想要达到的目标:

假设我想要“更好的”Python3.6 包,例如来自 python 专用 ppa,就我而言;http://ppa.launchpad.net/jonathonf/python-3.6/ubuntu

问题:

如何apt选择要安装的软件包,有没有一种方法可以告诉我apt从一个所需的 ppa 安装它?
我猜它会选择最新的包(我错了吗?),但是如果出于某些原因我想保留特定的旧版本怎么办?

python3.6 的例子在这里“只是”一个例子,这可能对任何包都有用。

注意重复:
即使评论中建议链接中的答案相同,入口点,即“问题”是完全相同的,很多人可能会通过此搜索结果而不是其他。所以,以我的拙见,严格来说,答案有点重复,而不是问题。

Rav*_*ina 7

正如您猜测apt的那样,将安装源中可用的最新版本。

例如:

$ apt-cache madison firefox

   firefox | 61.0.1+build1-0ubuntu0.18.04.1 | http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
   firefox | 61.0.1+build1-0ubuntu0.18.04.1 | http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages
   firefox | 59.0.2+build1-0ubuntu1 | http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages
Run Code Online (Sandbox Code Playgroud)

如您所见,有两种不同版本的 Firefox 可供我安装,让我们检查一下将安装哪一个:

$ apt-cache policy firefox | head -3
firefox:
  Installed: (none)
  Candidate: 61.0.1+build1-0ubuntu0.18.04.1
Run Code Online (Sandbox Code Playgroud)

如您所见,将要安装最新版本(它是安装的候选)

您可以使用:

sudo apt install package-name=version
Run Code Online (Sandbox Code Playgroud)

例如:

sudo apt install firefox=59.0.2+build1-0ubuntu1
Run Code Online (Sandbox Code Playgroud)

安装旧版本的软件。

作为pining的替代方法,您可以apt-mark阻止它升级:

sudo apt-mark hold firefox
Run Code Online (Sandbox Code Playgroud)