如何解除购电协议(PPAs)?

我使用add-apt-repository命令添加了许多PPA。有没有简单的方法来删除这些PPA?我在/etc/apt/sources.list中检查了适当的deb行,但它们不在那里。
由于这是一个服务器系统,所以一个命令行解决方案会很好!

13在Launchpad上有一个bug(https://bugs.launchpad.net/software-properties/+bug/446216),请求为add-apt-repository命令添加一个--remove参数。我已经提交了一个合并请求(https://code.launchpad.net/~mac9416/software-properties/add-apt-repo-remove-opt/+merge/30094)来实现这个功能,但是它还没有被接受。希望你很快就能拥有这个功能。 - crenshaw-dev
这真是个好消息。有一点让我有些烦恼的是,没有一个命令可以撤销添加;有点像aptitude只能安装!ppa-purge很好,但它甚至不在官方仓库中。 - David Ashford
1相关。特别是,可以查看我的这个答案来了解如何让ppa-purge与多架构一起工作。 - Eliah Kagan
2我可以建议尝试搜索不必要的部分,然后逐个删除它们:grep -i WhatYouWantTosearch /etc/apt/sources.list{,.d/*} - Vladimir Ch
3通过图形用户界面(GUI):sudo synaptic > 配置 > 软件源 > PPAs > (选择一个PPA) > 删除(或者可能是"移除",不确定正确的翻译,我只能在另一种语言中检查程序选项)。 - Fran
ls /etc/apt/sources.list{,.d/*} 可能会显示你错过的列表,正如Vladimir Ch所指出的 - Pau Coma Ramirez
27个回答

有几个选择:
  1. 使用--remove标志,类似于添加PPA的方式:
  2. sudo add-apt-repository --remove ppa:whatever/ppa
    
  3. 您还可以通过从/etc/apt/sources.list.d目录中删除.list文件来删除PPA。
  4. 作为更安全的选择,您可以安装ppa-purge:
  5. sudo apt-get install ppa-purge
    

    然后,优雅地降级由它提供的软件包到官方仓库提供的软件包,并删除PPA:

    sudo ppa-purge ppa:whatever/ppa
    

    请注意,这将卸载PPA提供的软件包,但不会卸载官方仓库提供的软件包。如果您想删除它们,应该告诉apt:

    sudo apt-get purge package_name
    
  6. 最后但并非最不重要的是,您还可以在Ubuntu设置的"软件源"部分禁用或删除PPA,只需点击几下鼠标即可(无需终端)。

32这将从存储库列表中删除PPA,但如果该软件包是标准存储库中某个软件包的较新版本,则您必须手动降级该软件包。ppa-purge(请参阅其他答案)可以为您完成此操作。 - Marcel Stimberg
31我收到了add-apt-repository: error: no such option: --remove的错误信息 :-/ - Rafa
8sudo apt-add-repository --remove ppa:repo_name/subdirectory - MountainX
1-r 可以代替 --remove - thameera
8同样地,我遇到了add-apt-repository: error: no such option: --removeadd-apt-repository: error: no such option: -r的错误提示。 - virtualxtc
在一台电脑上,我有一个“--remove”标志,而在另一台(相同的Mint版本发行版)上却没有删除标志! - Melroy van den Berg
1我刚刚收到了一个错误信息:“无法添加PPA:'ppa:whatever/ppa'。 请检查PPA的名称或格式是否正确。” 如何处理这个问题? - Casper
4如果--remove标志不起作用,应该根据下面提供的信息修改上面的答案。具体来说,删除/etc/apt/sources.list.d目录中的条目。 - user1816847
1我打开 /etc/apt/sources.list.d 目录,然后运行 rm ppaName 命令,问题就解决了。谢谢。 - erhun
人们一直在使用被接受的答案,在用户没有安装或升级第三方软件源的情况下,禁用它就足够了;但在大多数情况下,当人们已经安装或更新了任何软件包时,按照指示进行操作将在能够回滚软件包之前禁用该软件源,导致输出为:“无法找到PPA的软件包列表”。 - xangua
1为什么ppa-purge更"安全"? - stragu
1@chtfn 它只会移除在PPA上可用的软件包,并将软件包降级为Ubuntu官方仓库中可用的版本。http://www.webupd8.org/2009/12/remove-ppa-repositories-via-command.html - xangua
1@xangua 所以为什么这样做比仅仅移除ppa更"安全"呢?仅仅移除ppa后可能会出现哪些问题?从ppa中获取的软件包将无法获得安全更新吗? - stragu
2@chtfn 我认为这就是问题,它们会过时。当然这取决于软件包的情况,但这肯定可能成为一个问题。 - Mark
1请考虑删除此答案,更新它或者加上一个粗体的免责声明,说明它已经在最新的发行版中过时了。 - anol
即使你不像@anol建议的那样移除它,也要添加一条说明来说明如何确定最佳行动方案。如果它取决于Ubuntu版本或软件包是什么,请说明,并告诉我们如何查找。看起来Ubuntu的软件包管理比我想象的复杂,让我头晕。 - Michael Scheper
无法找到软件包ppa-purge。 - IgorGanapolsky
sudo add-apt-repository --remove ppa:whatever/ppa 这个命令只会移除存储库,不会同时移除应用程序。我并不想降级,只是想移除 KDE 的后备端口,这样下次就不会更新 beta 版本的 KDE 了。 - Hrvoje T
2@Hrvoje T add-apt-repository 不会卸载应用程序,它只会移除软件源,以防止未来的更新被获取/安装。(和大多数命令一样,您可以通过输入man <command>来阅读手册页,对于这个命令来说是:man add-apt-repository。) - ColdCold
3如果我的仓库以https://开头而不是ppa:,我该怎么办? - Aaron Franke
无法访问PPA(https://launchpad.net/api/1.0/~ondrej/+archive/php5)以获取PPA信息,请检查您的互联网连接。 - Akira Yamamoto
我不得不按照https://askubuntu.com/a/628772/132098的指示来清除我Ubuntu安装中的其他PPA痕迹。 - Abdull
在Ubuntu 14.04中,--remove选项不可用。 - Francisco
@Francisco 是的,该选项已在 software-properties 版本 0.76 中添加。 - jarno
@AaronFranke 你可以使用我的ppa-purge分支来做这个。它修复了几个bug,并对Universe发行组件中可用的ppa-purge进行了改进。目前,我还没有成功打包或创建PPA,但也许有一天会有一个在这里。当前,你可以通过链接找到git存储库。在存储库中,你可以找到ppa-purge脚本,你可以将其复制到/usr/local/bin/,并且在debian子目录中,你也可以找到bash补全文件,它可以更容易地使用该命令。 - jarno
@AaronFranke 或者你可以将脚本复制到 /usr/local/sbin,因为 ppa-purge 传统上是安装在 sbin 下的,这是合乎逻辑的,因为它用于管理并需要超级用户权限。 - jarno
对于我自己来说,在/etc/apt/sources.list.d/中有一个已经不存在的PPA,所以出现了这个错误。我不得不将其删除(实际上是用我需要的ffmpeg的更新仓库替换它),然后sudo apt-get update就正常工作了。 - Joshua Pinter
我必须在ppa前面加上https://才能成功删除它。 - run_the_race
我不太清楚如何准确指定要删除的存储库。例如,在/var/lib/apt/lists目录中,我有一个名为deb.nodesource.com_node%5f12.x_dists_bionic_main_binary-amd64_Packages的文件,我该如何将其转换为ppa:x/y格式? - Michael
@Michael 你不能翻译它,因为它不是一个PPA。然而,我想你可以使用我改进的ppa-purge版本来删除源并移除/降级相应的软件包,该版本作为PPA 这里 提供。你可以使用Tab键自动补全来轻松选择存储库。 - jarno

只需再次运行apt-add-repository命令,并使用--remove选项来移除通过命令行添加的PPA。例如:
sudo apt-add-repository --remove ppa:kernel-ppa/ppa

然后更新为:
sudo apt-get update

这会永久删除那个PPA吗? - Chirag
1是的,永久删除。如果您想再次使用它,必须手动添加,就像第一次使用一样。 - ish
6就记录而言,--remove/-r标志是在10.10版本中添加的。来源:http://askubuntu.com/a/18202/41756 - Niels Bom
6如上所述,我正在运行13.10版本,并且遇到了add-apt-repository: error: no such option: --remove的错误。 - virtualxtc
我收到了add-apt-repository: error: no such option: --remove的错误信息。 - amphibient
为什么这不是被选中的答案?对我来说,这个方法非常有效。被选中的答案给了我很多我没有要求的选项,感觉就像在阅读微软支持页面一样。 - Clain Dsilva
1@ClainDsilva 这是因为你会被困在本地安装的任何软件包版本上,这些软件包可能是从PPA安装的。你应该始终使用ppa-purge。 - John Scott
@ClainDsilva:对我没用。至少被选中的答案提到了ppa-purge,这正是我最终需要使用的。这使得它比微软支持页面更可靠,因为后者通常并不包含正确的答案。 - Michael Scheper
@MichaelScheper 这正是我的观点,他们实际上并没有包含正确答案。 - Clain Dsilva
我认为应该将@user76204的答案与这个答案结合使用。这是因为apt-add-repository --remove ppa:kernel-ppa/ppa实际上并没有清除/etc/apt/sources.list.d和/etc/apt/trusted.gpg.d中的单独的.list文件和密钥环。 - Hee Jin

或者,由于ppas存储在/etc/apt/sources.list.d中,您可以通过输入以下命令找到要删除的那个:
ls /etc/apt/sources.list.d

然后当您记录下那个有问题的ppa的名称(例如myppa.list)时,您可以输入:

sudo rm -i /etc/apt/sources.list.d/myppa.list

小心使用rm命令(这就是为什么我使用了交互式开关,以便您可以确认操作)。然后运行sudo apt-get update。
这种方法只是删除ppa.list文件;它不会删除任何其他文件,也不会解决ppa引起的其他问题;为此,您可以在恢复更新功能后使用ppa-purge(我知道您在问题中提到了这一点,但我为未来的读者添加了这一点):请参阅这里获取有关ppa-purge的更多信息。
还要考虑到,如果您之前将存储库的密钥添加为受信任的您应该将其删除
# list the trusted keys
sudo apt-key list
# remove the key
sudo apt-key del KEY_ID

我删除了 /etc/apt/sources.list.d/ 文件夹中的所有内容,但仍然有4个错误条目:/为什么现在开始失败了呢... - m3nda
2请注意,在列出密钥时,它们会有类似于 pub 2048R/5044912E 2010-02-11 的行。在这种情况下,要删除此密钥,KEY_ID5044912E。请参阅 https://askubuntu.com/a/107189/108037。我提到这一点是因为当将 2048R/5044912E 作为密钥 ID 传递给 apt-key del 时,它会静默失败并返回 OK - jamesc
3在Ubuntu 16及以上版本中,当删除密钥时,KEY_ID是pub文件第二行的最后8个字符。例如,你看到EB4C 1BFD 4F04 2F6D DDCC EC91 7721 F63B D38B 4796,在这种情况下,KEY_ID是D38B4796,所以你需要执行以下命令:sudo apt-key del D38B4796 - Emmanuel N K
6年后,我仍在Google这个问题的答案。https://askubuntu.com/questions/307/how-can-ppas-be-removed#comment584640_173209 - philshem
这对我有效,当add-apt-repository --remove没有任何作用时。 - Joshua Pinter
我的新增的有问题的PPA没有在/etc/apt/sources.list.d中列出。 - Estatistics

你可以使用

sudo ppa-purge ppa:repository-name/subdirectory

在终端中执行命令。
首先,您需要安装ppa-purge才能使用此命令。要这样做,请使用sudo apt-get install ppa-purge或点击此按钮: 通过软件中心安装
(来源:hostmar.co) 了解更多信息,请点击这里

6对于已删除的代码库,这种方法是行不通的,会出现“警告:无法找到PPA(个人软件包档案)的软件包列表:代码库名称子目录”错误。 - Lekensteyn
这个软件不支持Ubuntu 11.10,是我错了吗? - math
10嘿,这对我没用,但是我太喜欢这种语法了,所以还是给它点赞。 - Conrad.Dean
@DaveJarvis 在任何系统上,默认情况下都没有安装这个软件 =/. 我已经编辑了答案,包括如何安装它的信息。 - Alaa Ali
这对我来说没有起作用,显然它没有禁用ppa,也没有实际降级软件包。然而,它会打印出一个软件包列表,如软件包名称/发行版。如果您手动禁用ppa,然后运行apt-get install <完整的软件包列表>,apt-get将根据输出自动为您降级,我认为这与其内部操作是相同的。 - Berdir
我喜欢这个选项甚至提供自动补全功能。所以,如果你对名称的开头有一个想法,就不需要猜测语法是什么了。 - smac89
@smac89,在我的ppa-purge的PPA中进一步改进了,安装说明请参见此处 - jarno
@Berdir我不建议这种方式,因为它会将所有软件包标记为手动安装,这样在将来删除应用程序时会更加困难。请参考上面的评论。 - jarno

回答这个问题将对你有所帮助。

你可以在系统 > 管理 > 软件来源中管理PPA,也可以通过删除/etc/apt/sources.list.d/中的文件来进行管理。

你还可以使用一个叫做ppa-purge的软件包。

同时,正如我在上面链接的问题中评论过的那样:

在Launchpad上有一个bug请求增加add-apt-repository命令的--remove参数。我已经提交了一个合并请求来实现这个功能,但目前还没有被接受。希望很快你就能拥有这个功能。


4我在“Ubuntu软件中心 > 编辑 > 软件源”中找到了它。 - Josh M.
"ppa-purge"的链接无法使用,会显示404错误。 - Cristiana Nicolae
4在Ubuntu 16.04中,找到PPA列表的方法是系统设置 -> 系统 -> 软件与更新 -> 其他软件 - knocte
你知道我如何通过命令行进入System > Administration > Software Sources吗?(我正在使用i3的Ubuntu,所以没有那些菜单方便)。 - BenKoshy
对于Ubuntu 20.04 -> 软件更新器 -> 设置 -> 其他软件 - run_the_race

有些人可能更喜欢通过图形界面来添加和删除软件源。从Ubuntu 10.10开始,这需要一些额外的工作。关于此问题的解释可以在wiki上找到。为了尽量将所有答案都放在一个地方,我会在这里总结重要的细节。请务必查看维基(特别是在发布新版本的Ubuntu后)以确保此过程仍然有效。
首先,您需要在“系统”->“管理”菜单中重新启用“软件源”。右键单击应用程序/位置/系统菜单,然后点击“编辑菜单”。

Click 'Edit Menus'

这将打开一个窗口,向下滚动并点击“管理”。勾选“软件源”旁边的复选框,然后点击“关闭”按钮。

Check the box next to 'Software Sources'

去系统->管理,你应该在菜单中看到“软件源”。

'Software Sources' now in menu

在打开的窗口中,点击顶部的“其他软件”选项卡。

'Other Software' tab

你应该能看到你添加的所有存储库(包括通过add-apt-repository添加的PPA)。你可以通过取消勾选旁边的框来临时禁用一个存储库。要永久删除一个存储库,将其选中并点击“删除”按钮。完成后,点击“关闭”按钮。
正如Marcel Stimberg之前提到的:

这将从存储库列表中删除PPA,但如果该软件包是标准存储库中某个软件包的更新版本,则您必须手动降级该软件包。ppa-purge(请参见其他答案)可以为您执行此操作。

希望这能帮到你。

您不需要编辑菜单,软件中心菜单中有“软件源”条目。 - Jorge Castro
谢谢。看起来是我这边的gksu出了问题,导致我一开始没有看到软件源。我会在本地解决这个问题并更新答案。 - nhandler

ppa-purge 是你的好朋友。它会自动卸载通过 ppa 安装的软件,并且移除该 ppa。

通过以下命令安装 ppa-purge:

sudo apt-get install ppa-purge

然后像这样使用它:

sudo ppa-purge ppa-url

完成。


2OP已经尝试了ppa-purge。 - jokerdino

自从Ubuntu Maverick(10.10)之后,add-apt-repository 命令接受一个 -r--remove 参数,以与安装方式相同的方式删除 PPA。:)
所以:
安装: sudo apt-add-repository ppa:user/repository 卸载: sudo apt-add-repository -r ppa:user/repository

2谢谢!我使用了sudo apt-add-repository -r ppa:user/repository命令从New Linux Counter Project中卸载了一个顽固的ppa。我尝试了很多命令和建议,但是没有一个对我有帮助,只有你的命令有效!谢谢!还有一点信息:这个方法在12.04 LTS版本也适用,不仅仅在Maverick上。 - Cristiana Nicolae
不客气,@CristianaNicolae!根据你的建议,我已经更新了我的回答,谢谢你!:) - Paulo Freitas
我正在使用13.10版本,但是当我运行add-apt-repository命令时出现了错误:没有这个选项:-r。 - virtualxtc
1@virtualxtc,我目前正在运行Ubuntu 14.04,它仍然在apt-add-repository命令中提供了选项-r--remove。因此,我认为您正在使用修改过或过时的apt-add-repository版本。这个实用程序是由python-software-properties软件包提供的,也许您正在使用其锁定版本。您可以在此处检查其源代码:http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/trusty/software-properties/trusty/files 这些删除选项是在2010年底的修订版47中引入的。因此,它们存在于10.10以来,并且从未更改,正如您在源代码中所看到的。 - Paulo Freitas
有几个其他用户报告了相同的问题,所以这个锁定应该是一个相当常见的事情。更奇怪的是,-r --remove标志选项在man / help文件中列出,但仍然会产生所述的错误。下次我在Ubuntu时,我会查看一下我的python-software-properties。 - virtualxtc

打开Ubuntu软件中心,然后从菜单中选择“软件源” - 在那里你可以添加/编辑/删除软件仓库。

运行以下命令:
sudo add-apt-repository --remove ppa:kernel-ppa/ppa 
sudo apt-get update

如上所述,我正在运行13.10版本,并且遇到了add-apt-repository: error: no such option: --remove的错误。 - virtualxtc