Архивы пакетов

Архив пакетов — это место, в котором хранится список пакетов, которые можно установить в 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)))

1. Часто — несовместимость лицензий, хотя иногда бывает и несоблюдение автором требований GNU.