web-dev-qa-db-ja.com

Emacsのアップグレード後にELPAパッケージを再構築する方法

GNU EmacsをMacOSで23から24にアップグレードしたところ、一部のELPAインストールパッケージが機能しなくなりました。そのうちの1つはAucTeXです。削除してパッケージマネージャーから再インストールすると、再び機能しますが、すべてのパッケージに対してこれを手作業で行いたくないのですが、インターネットでそれについて何も見つけられないのではないかと少し混乱しています。

Emacsの新しいバージョン用に.elcを再コンパイルする必要はありませんか?これはなぜpackage.elの機能ではないのですか?

51
Thomas

すべてのパッケージを再インストールする必要はありません。 Emacs LISPバイトコードは通常、メジャーバージョン間で互換性がないため、パッケージ自体はおそらく問題ありませんが、再コンパイルする必要があります。

すべてのパッケージを再コンパイルするには、M-: (byte-recompile-directory package-user-dir nil 'force)と入力します。 Emacsを再起動した後、パッケージは再び正常に動作するはずです。

88
lunaryorn

変数package-activated-listは、対象のパッケージのリストを保持しています。そのため、それぞれを再度インストールするだけで済みます。それらを明示的に削除する必要はありません。 package-installを呼び出すと、古いバージョンが吹き飛ばされます。

このコードをスクラッチバッファーに入れて評価します(つまり、カーソルを最後に置き、C-x C-eを押します)。

(dolist (package-name package-activated-list)
  (package-install package-name))
3
zck

これは私にとって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)))))
3
Nordlöw

emacs 25後の私のレシピ:

  1. .emacs内(パッケージリストを定義):
(custom-set-variables
 '(package-selected-packages
   (quote
      (browse-kill-ring helm undo-tree use-package)))
  1. ターミナルで:
$ rm -rf ~/.emacs.d/elpa/*
  1. emacsで:
(progn (package-refresh-contents)
    (package-install-selected-packages)
    (byte-recompile-directory package-user-dir nil 'force))
2
象嘉道