Wie verwaltet emacs seine Pakete?

9

Ich habe auctex aus dem Ubuntu-Softwarecenter installiert und dann eine neuere Version von auctex aus emacs installiert.

Ich habe dann das von Ubuntus Software-Center installierte Auctex deinstalliert. Ich habe festgestellt, dass der von emacs installierte nicht deinstalliert wurde.

Wie verwaltet emacs seine Pakete?

Gibt es keine Interferenzen zwischen Emacs und Ubuntu bei der Verwaltung der Installation und Deinstallation von Emacs-Paketen?

Wenn ich richtig liege, gab es vor einigen Jahren keine Möglichkeit, Pakete in Emacs zu installieren?

Vielen Dank.

Tim
quelle
2
IMO, diese Frage ist zu weit gefasst für SE Q & A. Lesen Sie besser das Emacs-Dokument und stellen Sie hier eine bestimmte Frage zu einem bestimmten Teil der Paketverwaltung, der für Sie unklar ist. Wir sollten Emacs doc hier nicht reproduzieren. Und wenn im Emacs-Dokument etwas Wichtiges fehlt, sollten Sie einen Fehlerbericht / eine Verbesserungsanforderung einreichen : M-x report-emacs-bug. Personen, die hier auf eine solche Frage antworten, sollten besser zu den Emacs-Dokumenten beitragen, wenn die Informationen fehlen. MEINER BESCHEIDENEN MEINUNG NACH.
Drew
3
Tim: Nur für den Fall, dass es Verwirrung gibt, sind ein Emacs "Paket" und ein Ubuntu / Debian "Paket" völlig unabhängige Dinge. Jedes Emacs-bezogene Debian-Paket hat keinerlei Verbindung zum in Emacs 24
integrierten
1
@ Tim, vergessen Sie nicht, eine Antwort zu akzeptieren, oder lassen Sie uns wissen, wenn die Antworten nicht zufriedenstellend sind.
Malabarba
1
@Drew Die Frage bezieht sich jedoch mehr auf die Interaktion zwischen Ubuntu- und Emacs-Paketen und wird daher in den Emacs-Dokumenten nicht behandelt. In den Antworten werden auch Pakete von Drittanbietern behandelt, die in den Dokumenten nicht behandelt werden. Daher ist dies wahrscheinlich der beste Ort, um solche Fragen zu stellen.
Brian Burns

Antworten:

11

Wie Paprika sagte, verwendet Emacs load-path, um nach verfügbaren elispDateien zu suchen ( .elc, .el)

Das load-pathwird nach dem ersten passenden Paket gesucht, wenn es benötigt wird. Wenn mehrere Kopien eines Pakets installiert sind, wird die erste geladen.

Der Distributionspaket-Manager kann nicht auf derselben Quelle wie er installiert werden package-install, da einer systemweit und der andere benutzerspezifisch ist.

Paketquellen

Eingebaut und distro-spezifisch

Distro Package Manager

Distro-Paketmanager bieten eine Auswahl an Emacs-Paketen, die installiert werden können. Nach meiner Erfahrung gehören diese häufig zu den beliebtesten / am weitesten verbreiteten Paketen. Vor der Entwicklung war package.eldies der einfachste Weg, um die Pakete zu erhalten. (Am einfachsten, wenn Sie nur laufen apt-get install <package>, anstatt die Versionskontrolle oder den direkten Download zu verwenden.

Über den Distributionspaket-Manager installierte Pakete werden installiert. Dies /usr/local/share/emacs/site-lisp/ist eine Standardeinstellung in load-pathund wird durch benutzerspezifische load-pathErgänzungen ausgeblendet .

Package.el

package.elwurde zuerst mit aufgenommen Emacs 24. Diese Version ist kompatibel mit Emacs 23, muss jedoch manuell installiert werden. Pakete, die von ihr abgerufen werden, sind möglicherweise kompatibel mit oder nicht Emacs 23.

package.elbietet ein durchsuchbares Repository mit Paketen für Emacs. Standardmäßig ist nur das ElpaRepository konfiguriert, aber der Zugriff auf MELPA und Marmelade kann hinzugefügt werden:

(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))

Dies bietet Zugriff auf einen viel größeren Pool von Paketen.

Standardmäßig werden package.elPakete in ~/.emacs.d/elpaund bei (package-initialize)diesem Aufruf installiert . Dieses Verzeichnis wird näher an der Vorderseite von platziert load-path, sodass diese Pakete Vorrang vor den vom Distributionspaket-Manager installierten Paketen haben.

Git / Bzr / hg / ... + EmacsWiki

Versionskontrollierte Pakete können durch Klonen manuell aus ihrem Repository abgerufen werden. Einige bieten auch Paketversionen an, die direkt heruntergeladen werden können.

EmacsWiki Elisp-Dateien können auch heruntergeladen werden, obwohl es sich in der Regel eher um einzelne Dateien als um Verzeichnisse handelt.

Stellen Sie nach dem Abrufen des Pakets sicher, dass sich der Zielordner auf Ihrem befindet load-pathund zur Verwendung verfügbar ist.

Paketverwaltung von Drittanbietern

Diese Tools bieten Wrapper oder zusätzliche Funktionen, um die Paketverwaltung zu zentralisieren. Sie wurden unter Berücksichtigung der gemeinsamen Konfiguration entwickelt, um sicherzustellen, dass auf allen Ihren Computern dieselben Pakete verfügbar sind.

El-Get

El-Get führt eine Liste der Rezepte , die es erlauben , zum Abrufen von Paketen mit package.el, git, emacswikials Quellen (unter anderem). Es bietet auch Funktionen, um sicherzustellen, dass die Pakete auf dem neuesten Stand sind, das Laden (verzögert oder sofort) zu verwalten und paketspezifische Anpassungen in Dateien zu speichern, die automatisch geladen werden, wenn das Paket geladen wird required.

Fass

Cask wurde für das Projektmanagement in / für Emacs entwickelt. Es verwendet eine caskDatei, um eine Liste der Abhängigkeiten (andere Pakete) zu verwalten, die für die Verwendung des Pakets erforderlich sind, und lädt fehlende Pakete herunter, um sicherzustellen, dass alles erfolgreich geladen wird.

Es kann verwendet werden, um lokale Paketkonfigurationen zu verwalten, indem Sie Ihre ~/.emacs.dals Projekt behandeln und (cask-initialize)beim Start aufrufen .

straight.el

straight.elist für Personen gedacht, die lokale Änderungen an ihren Paketen vornehmen und diese Änderungen möglicherweise vorgelagert einbringen möchten. Es werden Rezepte aus MELPA , GNU ELPA und EmacsMirror abgerufen oder Sie können Ihre eigenen angeben. Es unterstützt unter anderem das Schreiben einer Revisionssperrdatei für maximale Reproduzierbarkeit.

Use-Package

Das Use-Package wurde hauptsächlich als Emacs-Konfigurationsmanagement-Tool entwickelt. Es werden die erforderlichen package.elPakete heruntergeladen, es sind jedoch keine Mechanismen für den Zugriff auf andere Quellen integriert. Es ermöglicht das verzögerte Laden von Paketen und das verzögerte Anpassen. Dies verbessert die Emacs-Initialisierung und verlangsamt gleichzeitig die anfängliche Verwendung der Pakete (wenn sie jedoch nicht in einer bestimmten Sitzung verwendet werden, ergibt sich nur ein Nettogewinn).

Jonathan Leech-Pepin
quelle
elpakit ist ebenfalls erhältlich. Es führt eine ähnliche Aufgabe wie das Fass aus, jedoch ohne die nicht elisp-Bits.
Nic Ferrier
@nicferrier Können Sie erläutern, wie Sie es für die Paketverwaltung verwenden können? (Ich kann sehen, wie man es für vorhandene Pakete verwendet, aber Cask erlaubt auch das Hinzufügen beliebiger Quellen, wenn ich es richtig lese)
Jonathan Leech-Pepin
Mit elpakit können Sie hauptsächlich zwei Dinge tun: Repositorys auf Ihrer CD als Pakete erstellen (es werden auch Paketarchive aus Sammlungen dieser erstellt) und Pakete automatisch erstellt, die von anderen Paketen abhängen. Mx elpakit-package-list-buf erstellt einen Puffer mit einer Liste Ihrer elpa-Pakete, mit dem Sie dann ein weiteres Paket erstellen können, das von ausgewählten elpa-Paketen abhängt.
Nic Ferrier
Ich denke, die über den Distributionspaket-Manager installierten Pakete gehen in /usr/share/emacs/site-lisp, nicht /usr/local/share...da die localVerzeichnisse für Nicht-Distributionsinstallationen gedacht sind.
JeanPierre
10

Emacs verwendet das load-path, das im Wesentlichen eine Liste von Verzeichnissen ist, in denen nach Lisp-Dateien gesucht werden soll. Wenn ein Paket im verfügbar load-pathist, wird es installiert .

Es gibt keine Schnittstelle zwischen dem Debian / Ubuntu-Paketmanager und dem Emacs-Paketmanager (package.el). Ersteres installiert Emacs-Pakete systemweit (für jeden Benutzer des Computers verfügbar), während letzteres standardmäßig ein Paket in Ihrem Home-Verzeichnis installiert. Theoretisch können Sie beide Quellen verwenden, um Pakete zu installieren. Ich würde jedoch von dieser Vorgehensweise abraten: Bei der Installation desselben Pakets aus beiden Quellen können Probleme auftreten .

Die Liste der Emacs-Pakete, die Sie über den Debian / Ubuntu-Paketmanager installieren können, ist im Vergleich zu ELPA / MELPA / ... viel eingeschränkter, da jedes Paket speziell für Debian / Ubuntu vorbereitet werden muss. Mit anderen Worten: Paket auf ELPA! = Paket in Debian.

Paprika
quelle
Als er vor ein paar Jahren nachfragte,
dachte
@ Malabarba: In der Tat habe ich falsch verstanden. Ich habe den irrelevanten Satz entfernt.
Paprika
1
Diese Antwort gilt auch für andere Distributions-Paketmanager wie Yum (Fedora), Pacman (Arch) usw.
Vamsi
Und Sie vermissen Marmeladen-Repo von der Liste. Das ursprüngliche Nicht-GNU-Repository.
Nic Ferrier