Я столкнулся с ошибкой, связанной с взаимодействием нескольких пакетов. Чтобы сообщить об ошибке, мне нужно предоставить воспроизводимый рецепт, иллюстрирующий проблему. Это требует загрузки соответствующих пакетов, но ничего другого из моего init, и никаких других пакетов. Каков наилучший способ сделать это?
ОБНОВИТЬ
Чтобы уточнить, я знаком с концепцией просеивания моего .emacs в двоичном поиске, чтобы определить код, вызывающий проблему. В этой ситуации я точно знаю, какие пакеты уже вызывают проблему. Чего я не знаю, так это как использовать package-
систему для загрузки только этих нескольких пакетов.
(package-initialize)
загрузит пакеты, но и все остальное в моем .emacs.d/elpa
каталоге. package-load-list
позволяет мне указать конкретные версии пакетов для загрузки или конкретные пакеты для явного исключения . Мне нужно обратное - как предоставить Emacs список пакетов для включения без загрузки других пакетов в систему elpa / package.
источник
.emacs
файла - установите каждый пакет по одному и посмотрите, сохраняется ли проблема. Вы можете удивить себя и найти ответственный пакет, который не очень хорошо сочетается с другим пакетом. Когда вы продвинетесь настолько далеко, насколько сможете, запишите шаги, которые вы использовали для воспроизведения проблемы, и отправьте отчет об ошибке - например, начиная с Emacs -Q , установите пакет A, затем установите пакет B, затем установите пакет C, затем откройте*Scratch*
буфер и наберите ...comment-region
чтобы закомментировать (илиC-u
, чтобы, раскомментировать) область текста.package-load-list
это способ явно включать в себя пакеты, просто удалитеall
символ.Ответы:
package-load-list
Переменная может быть использована , чтобы указать , какие именно пакеты и версии для загрузки:Единственное, на что нужно обратить внимание, это то, что значение по умолчанию включает в себя
all
, если выsetq
это сделаете, то все будет в порядке, потому что это полностью перезаписывает исходное значение.источник
Опция, которая будет работать хорошо в тех случаях, когда разработчики, работающие над воспроизведением ошибки, возможно, еще не установили (или не хотят) эти зависимости, - это использование
try
пакета ( https://melpa.org/#/try ). Другие могут загружать пакеты из управления пакетами без изменения их локальной установки.источник
Этот вариант использования является ужасным недостатком
package.el
, поэтому не используйтеpackage.el
. Вместо этого используйте менеджер пакетов типаstraight.el
(я автор), который был специально разработан для поддержки этого варианта использования.Подробную документацию
straight.el
, включая сравнения с другими менеджерами пакетов, смотрите в README . Ниже я процитировал раздел, который относится к вашему вопросу.Использование
straight.el
для воспроизведения ошибокОдной из основных причин, по которой я хотел написать,
straight.el
было то, что существующие менеджеры пакетов не были хороши для воспроизведения ошибок. Например, некоторые из них будут загружать все установленные пакеты при инициализации менеджера пакетов! Очевидно, что это не приемлемо для «минимального теста».Напротив, при начальной загрузке
straight.el
ничего не загружается, кромеstraight.el
самого себя (репозитории рецептов по умолчанию регистрируются, но не клонируются, пока не понадобятся). Обычно вы должны загружатьstraight.el
с помощью фрагмента начальной загрузки , но когда вы находитесь внутриemacs -Q
, вот как вы можете инициализироватьstraight.el
:Вы также можете сделать это из командной строки, возможно, создав для нее псевдоним:
Допустим, вы делаете отчет об ошибке для Projectile. Чтобы загрузить только Projectile и все его зависимости, запустите:
Обратите внимание, что при этом будут использоваться проверенные в настоящий момент версии Projectile и все его зависимости, поэтому вы должны принять их к сведению, чтобы составить отчет об ошибке.
источник
Когда вам это нужно для одноразового использования (например, чтобы попробовать и протестировать рецепт для воспроизведения ошибки), вы часто можете избежать неприятностей с:
Я сказал «часто», потому что он не будет обращать внимания на зависимости, поэтому в некоторых случаях вам нужно будет добавить больше этих
-l ...
аргументов для загрузки других необходимых пакетов.источник