如何删除已安装的elpa软件包。

69
这很奇怪,list-packages 缓冲区显示某些已安装软件包的状态为“可用”。但是,它们不应该显示为“已安装”吗?当我点击其中一个时,会打开一个新的缓冲区告诉我该软件包已安装,但没有提供卸载选项。相比之下,我没有安装的其他软件包显示为“可用”,并带有“安装”选项。
如何卸载已安装的软件包?我目前要卸载的是 smooth-scrolling。

请参见我的重复提名的https://dev59.com/02Qn5IYBdhLWcg3w7KrS,其中包含一些有用的注释。 - tripleee
5个回答

59

对于 Emacs 25.1 及以上版本,命令

M-x package-delete

会提示您选择要删除的已安装软件包的名称。


5
需要注意的是,这仅适用于Emacs 25.1以上版本。 - npostavs
我仍然需要删除 ~/.emacs.d/elpa/... 中的包目录,以便在下次 Emacs 重启时不加载该包。 - Günter Zöchbauer
因为依赖关系而无法工作。 - ceving

57

软件包菜单显示了一个软件包的所有已知版本。

因此,您可能会看到一个已安装的软件包也列为可用,例如,如果有同一软件包的更新版本可用,或者如果相同的软件包可以从不同的存档中获取。

要删除这样的软件包,只需在列表中向下滚动,或使用C-s <PACKAGE-NAME>搜索软件包的出现次数。一旦找到软件包的已安装版本,请按D标记要删除的软件包;如果失败,请按d。您应该在软件包名称前面的左侧看到一个D标记。按x执行操作并实际删除软件包。


1
问题是,当我按D键时,旁边没有标记,尽管它已经安装了。 - johnbakers
1
@OpenLearner,你是否按下了标记为已安装的软件包版本上的D键?它在标记为可用的版本上不起作用。 - user355252
即使此软件包已安装并在单击时显示为已安装,但在列表中的实际列中没有任何一个显示为“已安装”。 - johnbakers
不确定,但听起来这里可能存在一个Emacs bug,或者至少有改进的空间,以使UI更清晰。如果您认为是这样,请考虑通过M-x report-emacs-bug进行报告。 - Drew
4
@OpenLearner 滚动到底部以获取已安装标志,您可能会发现未安装的最新版本。此外,请按d而不是D。 - netawater

51

我喜欢使用一种简单的解决方案:只需删除~/.emacs.d/elpa/(或在package-directory-list中指定的目录)中不需要的软件包目录。

编辑:此解决方案适用于出现故障的情况(可能是一个错误,也可能是手动修改软件包数据的结果)。请使用@lunaryon的答案;这是99.9%情况下正确的做法。


1
我的疑虑是,不会有另一个文件显示已安装的内容吗?这个文件应该不是目录本身的一部分。如果.emacs文件中并不总是包含这些信息,那么Emacs肯定知道它需要加载什么东西。 - johnbakers
6
没有这个文件。package-initialize扫描您配置的目录列表package-directory-list中的软件包。使用package-load-list,而autoload则执行“魔法”部分。通常,@lunaryorn建议的方法应该可以解决问题,但是当您遇到问题时,删除目录是一个安全的替代方法。 - juanleon
谢谢!我安装了“package-filter.el”,结果发现很多东西都坏了,包括包管理器,所以没有d -> x或任何其他东西,除了这个解决方案。 - ryenus
我的init.el文件中的变量custom-set-variables也有一些关于我想要移除的包的设置。它说:“如果你手动编辑它,可能会搞砸,所以要小心”。 - Gauthier

24

我刚刚通过卸载 django-snippets 包来取消安装。

M-x package-list-packages
C-s django-snippets

输入d标记要删除的软件包。

执行请输入x

与在~/.emacs.d/elpa/内删除相关目录完全相同。

注意,对于最近的Emacs版本,命令是list-packages(而不是packages-list-packages


1
只是一个小问题 - 我相信它应该是 package-list-packages - davidA

14

我是偶然发现的:打开包列表,找到想要删除的包并按下“D”键。完成后按下“X”键,将删除这些包。这与安装新包时的操作完全相同,只不过将“I”更换为“D”(我认为“D”代表“删除”)。


1
按下 F10 键查看软件包菜单: 标记为安装 (i) 标记为删除 (d) 执行标记选项 (x)。 - xiaobing
D is undefined - alper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接