Not found エラー
MELPAで公開されたパッケージを package install でインストールしている最中に、次のようなエラーが発生してインストールが止まってしまうことがある。
file-error "http://melpa.milkbox.net/packages/XXXXX-2015MMDD.HHMM.el" Not found
対処1
M-x package-refresh-contents
を実行したあとにもう一度 package-install を実行する。これで解決すればめでたしめでたし。
対処2
上記の対処で解決しない場合、原因は (各パッケージにではなく) melpaサーバ にある可能性がある。
list-packages ではまず各パッケージのメタ情報 (http://melpa.org/packages/archive-contents) を取得して一覧を作成する仕組みになっているが、この archive-contents と、実際に公開されているパッケージの間でバージョン情報の不整合がかなり頻繁に発生している。具体的には melpa サーバが提供している archive-contents の更新が遅い。これが Not found エラーの原因である。
list-packages で表示されるバージョン情報と、実際に http://melpa.org に掲載されているバージョン情報を比べてみて、異なっていればこのケースである 1。
なので対処法としては 2〜3日後に、メタ情報が更新されたのを見計らってまた改めて package-install を実行する というのが正しい。
ただ、どうしても今インストールしたいというケースはありますね。以下のようにやりましょう。
どうにかインストールする方法
-
インストールしたいパッケージのバージョンを、http://:/melpa.org で調べる。
-
(PACKAGE_USER_DIR)/archives/melpa/archive-contents を開く。
- PACKAGE_USER_DIR はelpaパッケージを格納しているディレクトリパスで、変数 package-user-dir に設定されている。
-
archive-contents の内容を改竄する。
例として helm のパッケージ情報は次のような記述になっており、(20150402 2318) というのがバージョンである。
(helm . [(20150402 2318) ((emacs (24)) (cl-lib (0 5)) (async (1 2))) "Helm is an Emacs incremental and narrowing framework" tar ((:url . "https://emacs-helm.github.io/helm/"))])
これを、melpa.org で調べたものに書き変える。melpa.org で示されたバージョンが 20150404.2303 であれば、
```lisp
(helm . [(20150404 2303) ((emacs (24)) (cl-lib (0 5)) (async (1 2))) "Helm is an Emacs incremental and narrowing framework" tar ((:url . "https://emacs-helm.github.io/helm/"))])
とするのが正解。
編集に失敗しても M-x package-refresh-contents を実行すれば元の (不整合のある) archive-contents に戻せるので気にすんな。
-
改竄が終了すればセーブして emacs を再起動。
-
再起動後すぐに、M-x package-list-packages-no-fetch を実行。ここから通常通りの操作で最新版がインストールできるようになっているはず。
-
頻繁にアップデートされる helm なんかではこの不整合がよく発生することを確認している。 ↩