Архивы пакетов
Архив пакетов — это место, в котором хранится список пакетов, которые можно установить в GNU Emacs.
Самые известные архивы пакетов:
- GNU
-
Этот архив уже давно доступен по умолчанию. Пакеты в нём очень высокого качества, т. к. проект GNU тщательно следит за этим. Обновления пакетов в этом репозитории довольно редки, но можно быть уверенным, что ничего не сломается и будет работать именно так, как написано в документации.
Однако, есть и исключения. Например, пакет
guess-languageлучше устанавливать из MELPA, так как версия в архиве GNU содержит ошибки.Страница проекта: elpa.gnu.org
- NonGNU Elpa
-
Пакеты довольно высокого качества, по каким-либо причинам не попавшие в репозиторий GNU[1]. Сломанные пакеты сюда попадают редко, как правило всё работает именно так, как и ожидается.
Страница проекта: elpa.nongnu.org
- MELPA
-
На текущий момент самый большой архив пакетов. Единственная проблема — пакеты формируются на основе самой свежей ревизии кода в основной ветке репозитория. Сломанные, заброшенные и попросту устаревшие пакеты здесь не редкость. Установленные отсюда пакеты обновляются порой по нескольку раз в день.
Используйте пакеты из MELPA с осторожностью.
Страница проекта: melpa.org
- MELPA Stable
-
Пусть слово «stable» не вводит вас в заблуждение — оно в данном случае означает совсем не то, что вы думаете. Вот цитата с сайта архива:
Packages in MELPA are built directly from the latest package source code in the upstream repositories, but we also build and publish packages corresponding to the latest tagged code in those repositories, where version tags exist. These packages are published in a separate package archive called MELPA Stable. Most users should prefer MELPA over MELPA Stable.
Недословный перевод: пакеты в архиве MELPA Stable формируются на основе ревизий кода, отмеченных тегами. Иногда это означает, что код стабилизирован и протестирован, но не всегда.
По своему опыту скажу, что с пакетами из этого архива значительно меньше проблем, чем с пакетами из MELPA.
Страница проекта: stable.melpa.org
(require 'package)
(add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/") t)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
(add-to-list 'package-archives '("nongnu" . "https://elpa.nongnu.org/nongnu/") t)
(package-initialize)
Приоритеты архивов
По умолчанию все архивы в GNU Emacs имеют одинаковый приоритет. В этом случае предпочтение отдаётся самой новой версии пакета. Например, пусть пакет доступен в архивах GNU, MELPA Stable и Melpa и имеет следующие версии:
-
GNU: 1.8.0
-
MELPA Stable: 1.8.1
-
MELPA: 20250921
package.el сравнит версии и определит, что самая новая — в архиве MELPA.
Как было сказано выше, пакеты из этого архива не отличаются стабильностью. Однако, GNU Emacs позволяет настроить порядок, в котором отдаётся предпочтение архивам, то есть их приоритет.
(setopt package-archive-priorities
'(("gnu" . 40)
("nongnu" . 30)
("melpa-stable" . 20)
("melpa" . 10)))
Обновление локальной копии
Архивы не будут работать до тех пор, пока GNU Emacs не загрузит файл со списком доступных пакетов на локальный компьютер.
Для этого можно использовать команду packages-refresh-contents, но лучше добавить необходимый код в init.el.
(unless package-archive-contents
(progn
(message "Обновление списка архивов...")
(package-refresh-contents)))