1. ホーム
  2. emacs

[解決済み] Emacsでパッケージの更新をする

2022-04-25 16:05:45

質問

パッケージについて、以下のような設定をしています(より良い推奨のものがあるかはわかりません)。

(require 'package)
(setq package-archives '(("ELPA" . "http://tromey.com/elpa/") 
                          ("gnu" . "http://elpa.gnu.org/packages/")
                          ("marmalade" . "http://marmalade-repo.org/packages/")))

; Apparently needed for the package auto-complete (why?)
(add-to-list 'package-archives
             '("melpa" . "http://melpa.milkbox.net/packages/") t)

(package-initialize)
(setq url-http-attempt-keepalives nil)

パッケージのインストールとアップデートに関連して、3つの質問があります。

Q1. 利用可能なパッケージのリスト(および最新バージョン)を更新し、特定のパッケージを更新する方法はありますか?

Q.2 以下のパッケージソースの違いは何ですか?

  • ELPAです。
  • GNU
  • マーマレード
  • メルパ

Q.3 に追加される順序は重要ですか? package-archives ?

解決方法は?

  1. パッケージのリストを自動的に更新するためには。 すでにパッケージリストがない場合のみ は、以下を使用してください。

    (when (not package-archive-contents)
        (package-refresh-contents))
    
    

    インストールされているすべてのパッケージを更新するには、次のように入力します。 package-list-packages に移動します。 *Packages* バッファに保存し (パッケージのリストも更新し)、次に U x .

    package-refresh-contents に追加したすべてのレポから無条件にパッケージリストをダウンロードしようとします。 package-archives ; package-archive-contents は、すでにパッケージリストをダウンロードしている場合は、nil 以外となります。

  2. ELPA がオリジナルです。 もうあまりメンテナンスされていないと思うのですが、どうなんでしょう。 私は使っていません。

    GNU は公式のものです。 Emacsと一緒にメンテナンスされているため、常に動作するはずですが、アップデートや新しいパッケージはあまり来ません。

    マーマレード は基本的に、完全なパッケージをアップロードすると、それが marmalade レポに追加されるウェブサイトです。 パッケージのアップストリームへのリンクを送信するだけで、パッケージの作成が完全に自動化されるわけではありません。 必ずしも上流を追跡したいわけではないので、これはRight Thingだと思います。 残念ながら、しばらくメンテナンスされていませんでしたが、最近誰かがそれを引き継いだので、いつかは復活し、より良いものになるはずです。

    メルパ EmacsWiki の lisp エリアや github リポジトリなどの URL を受け取り、そこから自動的にパッケージをビルドします。 そのため、追跡しているものが何であれ、通常せいぜい1日程度は遅れています。 アップストリームを追跡していますが、実際に問題になったことはありませんし、私のパッケージはほとんどここから来ています。 また メルパ安定版 これは Melpa に似ていますが、最新リビジョンではなく、上流レポのタグ付きリビジョンを取得します。 Melpa stable は Melpa よりも少ないパッケージしか持っていません。

    オーグモード は、独自の package.el レポ( http://orgmode.org/elpa/ ).

    どのパッケージリポジトリも同じように動作します。 package-archives .

    以下は、より詳細な ブログ記事 このテーマについては、私もほぼ同意見です。

  3. よくわからないのですが、パッケージが異なるレポに重複している場合、レポの表示順が package-archives は優先順位を決定します。 優先順位が高いのがリストの最初か最後かはわかりません。

    更新: Emacs 25 では、変数 package-archive-priorities を使用すると、パッケージ・レポに優先順位をつけることができます(例:MELPAよりELPAを優先する)。


以下は、私の該当部分です。 init.el もし興味があれば。

(setq jpk-packages
      '(
        ac-dabbrev
        ...
        yasnippet
        ))

(package-initialize)
(add-to-list 'package-archives
             '("melpa" . "http://melpa.org/packages/"))
(add-to-list 'package-archives
             '("org" . "http://orgmode.org/elpa/"))

;; install any packages in jpk-packages, if they are not installed already
(let ((refreshed nil))
  (when (not package-archive-contents)
    (package-refresh-contents)
    (setq refreshed t))
  (dolist (pkg jpk-packages)
    (when (and (not (package-installed-p pkg))
             (assoc pkg package-archive-contents))
      (unless refreshed
        (package-refresh-contents)
        (setq refreshed t))
      (package-install pkg))))

(defun package-list-unaccounted-packages ()
  "Like `package-list-packages', but shows only the packages that
  are installed and are not in `jpk-packages'.  Useful for
  cleaning out unwanted packages."
  (interactive)
  (package-show-package-list
   (remove-if-not (lambda (x) (and (not (memq x jpk-packages))
                            (not (package-built-in-p x))
                            (package-installed-p x)))
                  (mapcar 'car package-archive-contents))))