Как обновить пакеты, установленные с помощью use-package

24

Я использую use-packageдля установки и настройки пакетов (большинство из них находятся в melpa). Есть ли чистый автоматизированный способ поддерживать все эти пакеты в актуальном состоянии?

Если нет, каков наилучший рабочий процесс в этом случае?

Примечание: очень похожий вопрос здесь с ответом, но я хотел уточнить: «Вам все равно придется иметь дело с установкой обновлений». Я не смог прокомментировать ответ для уточнения, так как мне не хватает репутации.

Яагрит Сапана
источник

Ответы:

17

Я просто делаю это вручную: запускаю команду « list-packagesХит», Uчтобы пометить доступные обновления, затем просматриваю, чтобы решить, есть ли какие-либо, которые я не хочу брать. Затем xобновить. Я делаю это довольно регулярно, и часто проверяю, что нового одновременно. У меня есть пара настроек, чтобы упростить это (см. Ниже).

Я подозреваю, что обновление может быть автоматизировано, но вы действительно хотите рассмотреть случай, когда обновление что-то ломает, и вам нужно откатить его назад, а затем помешать вашему автоматическому обновителю установить его заново.

Некоторые настройки меню пакета:

(defun package-menu-find-marks ()
  "Find packages marked for action in *Packages*."
  (interactive)
  (occur "^[A-Z]"))

;; Only in Emacs 25.1+
(defun package-menu-filter-by-status (status)
  "Filter the *Packages* buffer by status."
  (interactive
   (list (completing-read
          "Status: " '("new" "installed" "dependency" "obsolete"))))
  (package-menu-filter (concat "status:" status)))

(define-key package-menu-mode-map "s" #'package-menu-filter-by-status)
(define-key package-menu-mode-map "a" #'package-menu-find-marks)

С этим я могу использовать, s newчтобы просто увидеть, какие пакеты недавно доступны. И после нажатия, Uчтобы пометить обновления, я могу нажать aсписок встречающихся буферов из тех, которые были отмечены, на случай, если я захочу покопаться в деталях того, что изменилось и т. Д.

glucas
источник
Спасибо, вопросы в основном отвечают. aработал для обнаружения помеченных пакетов. Тем не менее, s installedили любой из оставшихся трех статусов возвращает пустой список.
Яагрит Сапана
Какую версию Emacs вы используете?
glucas
Я использую 24.5.1
Яагрит Сапана
Ах хорошо. Я проверил, и package-menu-filterкоманда является новой в 25.1, так что эта команда не будет работать для вас.
glucas
Я делаю это каждый понедельник утром
Рики Нельсон
10

Вы можете использовать auto-package-updateдля автоматического обновления пакетов.

Скопировано из моего другого поста ( /emacs//a/31903/9972 )

(use-package auto-package-update
   :ensure t
   :config
   (setq auto-package-update-delete-old-versions t
         auto-package-update-interval 4)
   (auto-package-update-maybe))

При такой настройке пакеты будут обновляться каждый 4день, а старые пакеты будут удаляться.

cslux
источник
0

Постарайтесь epmсохранить процесс обновления в чистоте.

ср https://github.com/xuchunyang/epm

Он может запускать процесс обновления в пакетном процессе emacs без загрузки обычных настроек init.el.

lurdan
источник
0

Существует чрезвычайно рекомендуемый пакет под названием paradox, который расширяет команды управления пакетами. Узнайте больше с https://github.com/Malabarba/paradox

(use-package paradox
  :init
  (setq paradox-github-token t)
  (setq paradox-execute-asynchronously t)
  (setq paradox-automatically-star t))

Эта установка возвращает статистику использования пакетов обратно в систему с помощью отдельно установленного токена github и обновляет пакеты в фоновом режиме, когда вы вручную запускаете команду, paradox-upgrade-packagesпривязанную к вашим выбранным ключам.

Прочтите встроенную документацию переменной paradox-github-tokenо том, как ее настроить.

Хейкки
источник
0

Просто введите список пакетов и нажмите SHIFT + U. Он пометит все установленные пакеты для обновления.

slk500
источник
Возможно, это не полностью автоматически.
ЖанПьер