如何在升级Emacs后重建ELPA包

Tho*_*mas 49 emacs elpa

我刚刚在MacOS上将GNU Emacs从23升级到24,并且一些ELPA安装的软件包停止工作.其中之一是AucTeX.删除它并通过包管理器重新安装它使它再次工作,但我不想手动为每个包执行此操作.我有点困惑,我在互联网上找不到任何相关信息.

对于新版本的Emacs,是否需要重新编译.elc?为什么这不是package.el的功能?

lun*_*orn 91

您无需重新安装所有软件包.包本身可能很好,但是,它们需要重新编译,因为Emacs Lisp字节代码通常在主要版本之间不兼容.

要重新编译所有包,请键入M-: (byte-recompile-directory package-user-dir nil 'force).重新启动Emacs后,包应该再次正常工作.

  • 虽然emacs字节代码确实保持向后兼容性,但重新编译通常是个好主意,特别是在转移到以后的主要版本时.原因是后来的主要版本经常引入新功能,其中一些可以带来改进的性能或功能. (2认同)

Nor*_*löw 6

这在 Emacs 25.1 和 26 上对我有用:

(defun package-reinstall-all-activated-packages ()
  "Refresh and reinstall all activated packages."
  (interactive)
  (package-refresh-contents)
  (dolist (package-name package-activated-list)
    (when (package-installed-p package-name)
      (unless (ignore-errors                   ;some packages may fail to install
                (package-reinstall package-name))
        (warn "Package %s failed to reinstall" package-name)))))
Run Code Online (Sandbox Code Playgroud)


zck*_*zck 5

该变量package-activated-list保存了我们感兴趣的软件包列表。因此我们只需要再次安装每个软件包即可。我们不需要显式删除它们;调用package-install会吹掉旧版本。

将此代码放入暂存缓冲区并对其进行评估(即将光标放在末尾,然后按C-x C-e):

(dolist (package-name package-activated-list)
  (package-install package-name))
Run Code Online (Sandbox Code Playgroud)