J'ai la configuration suivante pour les paquets (je ne sais pas s'il y en a une meilleure recommandée):
(require 'package)
(setq package-archives '(("ELPA" . "http://tromey.com/elpa/")
("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")))
; Apparently needed for the package auto-complete (why?)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
(setq url-http-attempt-keepalives nil)
J'ai trois questions liées à l'installation et à la mise à jour des packages.
Q1. Existe-t-il un moyen de mettre à jour la liste des packages disponibles (et les versions les plus récentes) et de mettre à jour un package spécifique?
Q.2 Quelle est la différence entre les sources de package suivantes?:
- EL PA,
- GNOU
- confiture
- melpa
Q.3 L'ordre dans lequel ils sont ajoutés est-il important package-archives
?
package-archives
. Débarrassez-vous de l'archive ELPA, qui n'est plus maintenue, et de l'archive marmelade, qui est un gâchis de paquets obsolètes et dupliqués sans conseils et maintenance clairs. Utilisez uniquement l'archive GNU standard et MELPA>(setq package-enable-at-startup nil)
si vous vous appelez(package-initialize)
.Réponses:
Afin de mettre à jour automatiquement la liste des packages, uniquement s'il n'y a pas déjà de liste de packages , utilisez ce qui suit:
Afin de mettre à jour tous les packages installés, tapez
package-list-packages
, qui vous mènera au*Packages*
tampon (et mettra également à jour la liste des packages), puis tapez U x.package-refresh-contents
essaie inconditionnellement de télécharger une liste de paquets à partir de tous les dépôts auxquels vous avez ajoutépackage-archives
;package-archive-contents
est non nul si vous avez déjà téléchargé la liste des packages.ELPA est l'original. Je ne pense pas que ce soit vraiment plus maintenu, mais je ne suis pas sûr. Je ne m'en sers pas.
GNU est "officiel". Il est maintenu avec Emacs, ce qui signifie que les choses devraient toujours fonctionner, mais les mises à jour et les nouveaux packages ne viennent pas très souvent.
Marmalade est essentiellement un site Web sur lequel vous pouvez télécharger un package complet et il sera ajouté au repo de marmelade. Vous ne soumettez pas simplement un lien vers l'amont du package, et cela n'automatise pas complètement la création du package. Je pense que c'est la bonne chose, car vous ne voulez pas nécessairement suivre en amont. Malheureusement, il n'a pas été entretenu pendant un certain temps, mais quelqu'un l'a récemment repris, il devrait donc être de retour et mieux à un moment donné.
Melpa prend une URL vers, par exemple, la zone lisp d'EmacsWiki ou un dépôt github, et construit automatiquement un paquet à partir de celui-ci. Ainsi, il a généralement au plus un jour de retard sur tout ce qu'il suit. Même s'il suit en amont, je n'ai jamais eu de problème en pratique, et c'est de là que viennent la plupart de mes paquets. Il y a aussi Melpa Stable , qui est comme Melpa mais récupère les révisions marquées du dépôt en amont au lieu de la dernière révision. Melpa stable a moins de paquets que Melpa.
Le mode organisation a son propre
package.el
dépôt ( http://orgmode.org/elpa/ ).Tous les dépôts de packages fonctionnent de la même manière, il vous suffit de les ajouter à votre fichier
package-archives
.Voici un article de blog plus détaillé sur ce sujet, avec lequel je suis pour la plupart d'accord.
Je ne suis pas sûr, mais je pense que si un package est dupliqué dans différents dépôts, l'ordre dans lequel les dépôts apparaissent
package-archives
détermine la priorité. Je ne sais pas si une priorité plus élevée se trouve au début ou à la fin de la liste.Mise à jour: Dans Emacs 25, il existe une variable
package-archive-priorities
que vous pouvez utiliser pour hiérarchiser vos dépôts de paquets (par exemple, préférez ELPA à MELPA).Voici la section pertinente de mon
init.el
, si vous êtes intéressé:la source
when (not package-archive-contents)
chèque?(refresh-package-contents)
sans condition avant de télécharger de nouveaux packages, sinon Emacs peut essayer de télécharger une ancienne version de package (qui est alors un 404), échouer et arrêter le chargement.Dans Emacs, utilisez
M-x list-packages
pour lister tous les paquets qui actualiseront automatiquement le contenu de l'archive. Ensuite, utilisezU
pour marquer tous les packages pouvant être mis à niveau etx
pour effectuer les nouvelles mises à jour. Emacs récupérera et installera ensuite toutes les mises à niveau, et vous demandera si vous souhaitez supprimer les anciennes versions obsolètes par la suite.Vous pouvez également jeter un œil à Carton qui fournit un moyen plus pratique de gérer vos paquets en les déclarant dans un fichier dédié, et inclut un client de ligne de commande pratique pour installer et mettre à jour automatiquement les paquets déclarés de cette manière.
L'ordre de
package-archives
n'a pas d' importance. Emacs regroupe le contenu de toutes les archives en une seule liste cohérente des packages disponibles et de leurs versions, stockés danspackage-archive-contents
.Ensuite
package-install
, Emacs choisira simplement la dernière version d'un package, quelle que soit l'archive d'origine. Pour plus de contrôle sur l'origine du paquet, MELPA fournit le paquet melpa qui permet de mettre en liste noire ou blanche des paquets à partir d'archives spécifiées.la source
S-u
pour être plus précis.S-u
? Le menu du package n'utilise pas cette liaison.Shift-u
par là.Dans le terminal:
cela vous met dans le tampon * packages *
emacs vous demandera (o / n), attendez les mises à jour
cela tuera le * packages * buffer et vous ramènera à * scratch *
cela quittera emacs et vous permettra de relancer via, mais vous devrez peut-être déboguer :(
mes 2 ¢
la source
M-x package-refresh-contents
, il m'a invité à taper «U» pour marquer tout pour la mise à jour, puis j'ai pu taper «x» pour exécuter les mises à jour.C'est plus un commentaire prolongé sur la réponse de jpkotta.
C'est un ajustement que j'expérimente pour la réponse de jpkotta ci-dessus:
(en remplaçant
(when (not package-archive-contents) (package-refresh-contents))
).La liste de paquets n'était pas suffisamment rafraîchissante pour mon cas d'utilisation.
Je n'ai pas envisagé s'il existe une solution plus efficace à mon problème; d'abord, je dois voir si le problème disparaît avec cet ajustement.
la source
package-archive-contents
est actualisé uniquement s'il n'existe pas. L'idée est que vous copiez votre .emacs.d sur une nouvelle machine et qu'il installe automatiquement tous vos packages, mais après cela, vous devez mettre à jour manuellement. J'essaye de mettre à jour environ une fois toutes les deux semaines. Je suppose que vous avez ajouté un package à votre liste, mais vous étiezpackage-archive-contents
trop vieux pour l'avoir?~/.emacs.d/elpa/
par défaut pour l'emplacement des paquets. Cependant, ma version de votre code d'installation de paquet est dans une "troisième" partition, (e:/emacs-config
ou/e/emacs-config/
). J'ajoute donc un package à la liste dans un système d'exploitation, et il devrait se mettre à jour lorsque je chargeEmacs
dans l'autre système d'exploitation. Bien sûr, il y a un élément de surpuissance dans ma solution, mais cela semble fonctionner au moins.package-archive-contents
semblait peut-être si déréglé m'échappe. C'est un problème que je n'ai pas précisé. Si je cherche et trouve une solution «plus élégante» à l'avenir, je l'ajouterai à mon message.(package-refresh-contents)
écrit à~/.emacs.d/elpa/archives
. Il n'est pas clair si vous avez ce répertoire partagé entre les systèmes d'exploitation. Je recommanderais de ne pas partager leselpa/
répertoires, car le bytecode d'Emacs (le code danselpa/
est bytecompiled) n'est pas rétrocompatible ( gnu.org/software/emacs/manual/html_node/elisp/… ). Vous devrez vous assurer que les deux installations ont la même version d'Emacs. Je garde mon.emacs.d
contrôle de version et je synchronise différentes installations avec cela.