web-dev-qa-db-fra.com

Comment reconstruire des packages ELPA après la mise à niveau d'Emacs

Je viens de mettre à niveau GNU Emacs de 23 à 24 sur MacOS et certains packages installés par ELPA ont cessé de fonctionner. L'un d'eux est AucTeX. Le supprimer et le réinstaller via le gestionnaire de packages l'a fait fonctionner à nouveau, mais j'ai Je ne veux pas le faire à la main pour chaque paquet. Je suis un peu confus de ne rien trouver à ce sujet sur Internet.

Le .elc n'a-t-il pas besoin d'être recompilé pour une nouvelle version d'Emacs? Pourquoi n'est-ce pas une fonctionnalité de package.el?

51
Thomas

Vous n'avez pas besoin de réinstaller tous les packages. Les packages eux-mêmes sont probablement corrects, cependant, ils doivent être recompilés, car le code d'octets LISP d'Emacs n'est généralement pas compatible entre les principales versions.

Pour recompiler tous les packages, tapez M-: (byte-recompile-directory package-user-dir nil 'force). Après avoir redémarré Emacs, les packages devraient à nouveau fonctionner correctement.

88
lunaryorn

La variable package-activated-list contient la liste des packages qui nous intéressent. Il nous suffit donc de réinstaller chacun. Nous n'avons pas besoin de les supprimer explicitement; appelant package-install fera sauter une ancienne version.

Mettez ce code dans un tampon de travail et évaluez-le (c'est-à-dire, placez votre curseur à la fin et appuyez sur C-x C-e):

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

Cela fonctionne pour moi sur Emacs 25.1 et 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

ma recette après emacs 25:

  1. dans .emacs (définissez votre liste de packages):
(custom-set-variables
 '(package-selected-packages
   (quote
      (browse-kill-ring helm undo-tree use-package)))
  1. dans un terminal:
$ rm -rf ~/.emacs.d/elpa/*
  1. dans emacs:
(progn (package-refresh-contents)
    (package-install-selected-packages)
    (byte-recompile-directory package-user-dir nil 'force))
2
象嘉道