ELPA/Marmalade报告“无法打开加载文件”~/.emacs.d/elpa/archives/-pkg

7

我已经安装了Marmalade并下载了一些有趣的包。但是现在,当我启动Emacs时,我遇到了这个错误:

Cannot open load file: c:/Documents and Settings/Carlos/Datos de programa/.emacs.d/elpa/archives/-pkg

如果我使用--debug-init,我会得到:
Debugger entered--Lisp error: (file-error "Cannot open load file" "c:/Documents and Settings/Carlos/Datos de programa/.emacs.d/elpa/archives/-pkg")
load("c:/Documents and Settings/Carlos/Datos de programa/.emacs.d/elpa/archives/-pkg" nil t)
(if (file-directory-p pkg-dir) (load (concat pkg-dir ... "-pkg") nil t))
(let ((pkg-dir ...)) (if (file-directory-p pkg-dir) (load ... nil t)))

package-load-descriptor("c:/Documents and Settings/Carlos/Datos de programa/.emacs.d/elpa/" "archives")
(lambda (name) (package-load-descriptor dir name))("archives")
mapc((lambda (name) (package-load-descriptor dir name)) ("anything-1.287" "anything-  complete-1.86" "anything-config-0.4.1" "archive-contents" "archive-contents~" "archives" "auto-indent-mode-0.35" "builtin-packages" "builtin-packages~" "clojure-mode-1.7.1" "clojurescript-mode-0.5" "coffee-mode-0.3.0" "color-file-completion-1.0.1" "color-theme-6.6.1" "color-theme-eclipse-0.0.2" "color-theme-github-0.0.3" "color-theme-railscasts-0.0.2" "color-theme-twilight-0.1" "css-mode-1.0" "drag-stuff-0.0.3" "evernote-mode-0.41" "find-file-in-project-2.0" "flymake-coffee-0.4" "flymake-haml-0.5" "flymake-ruby-0.4" "flymake-shell-0.5" "haml-mode-3.0.14" "highlight-parentheses-1.0.1" "html-script-src-0.0.2" "inf-ruby-2.1" "js-comint-0.0.1" "js2-mode-20090814" "lua-mode-20100617" "package.el" "package.el~" "project-local-variables-0.2" "ruby-compilation-0.7" "ruby-electric-1.1" "ruby-mode-1.1" "slime-20100404" "tabbar-2.0.1" "tabbar-ruler-0.2" "yasnippet-0.6.1" "yasnippet-bundle-0.6.1" "zenburn-1.8"))
(if (file-directory-p dir) (mapc (lambda ... ...) (directory-files dir nil "^[^.]")))
(lambda (dir) (if (file-directory-p dir) (mapc ... ...)))("c:/Documents and Settings/Carlos/Datos de programa/.emacs.d/elpa/")
mapc((lambda (dir) (if (file-directory-p dir) (mapc ... ...))) ("c:/Documents and Settings/Carlos/Datos de programa/.emacs.d/elpa/" "/usr/share/emacs/site-lisp/elpa/"))
package-load-all-descriptors()
package-initialize()
  (progn (package-initialize))
(if (load (expand-file-name "~/.emacs.d/elpa/package.el")) (progn (package-initialize)))
(when (load (expand-file-name "~/.emacs.d/elpa/package.el")) (package-initialize))
eval-buffer(#<buffer  *load*> nil "c:/Documents and Settings/Carlos/Datos de programa/.emacs" nil t)  ; Reading at buffer position 9019
load-with-code-conversion("c:/Documents and Settings/Carlos/Datos de programa/.emacs" "c:/Documents and Settings/Carlos/Datos de programa/.emacs" t t)
load("~/.emacs" t t)
#[nil "\205\264

这个文件不存在。我已经尝试用谷歌搜索这个问题,但是没有找到任何相关信息。
5个回答

13

很简单。由于某种原因,你目前使用的package.el是来自http://tromey.com/elpa/package.el的“经典”版本。它与最近的package.el版本极不兼容。我不知道你如何使用那个版本安装Marmalade软件包;也许你当时使用了不同版本的package.el,可能是因为你在使用更新的Emacs。

解决方法是使用捆绑在你的Emacs中的版本(如果它足够新),或者用这个版本替换你的~/.emacs.d/elpa/package.el,如Marmalade说明中所述。


我遇到了相同的问题,而且这个解决方案对我并没有起作用。当我将package.el文件添加到~/.emacs.d/elpa/package.el中,并评估.emacs缓冲区时,我会得到(file-error "Cannot open load file" "package")的错误提示。 - PPPaul
你的emacs初始化文件有两个可能的位置。一个是~/.emacs,另一个是~/.emacs.d/init.el。由于你正在使用前者,我认为~/.emacs.d没有放在你的load-path上。尝试改用后者的布局。最终,最好的解决方案是使用最新版本的Emacs,这样package.el就会被捆绑在一起了。已经有几个合适的稳定版本发布了。 - sanityinc
我想你的意思是“我删掉了我的emacs,现在一切都好多了” :D - expelledboy

4

在尝试解决类似问题时,我偶然发现了这个问题。在我的情况下,强制执行package-initialize已经解决了问题:

;; init.el
(require 'package)
(package-initialize)

尽管我没有阅读package.el的源代码,但我认为懒惰导致了该问题。虽然这是一个老问题,但我想回答一下,以便帮助其他人。
有关Emacs启动的更多信息,请参见http://www.gnu.org/software/emacs/manual/html_node/elisp/Startup-Summary.html

我最近在使用org-mode导出时遇到了这个问题,之前我不得不因为升级失败而进行了Ubuntu 12.10的全新安装。现在这个问题已经被解决了,而且非常顺利。 - Yemon Choi
另外阅读 C-h i g (emacs) Package Installation RET,从“自动包加载发生在加载初始化文件之后的原因是用户选项只有在加载初始化文件后才能接收到它们的定制值,包括影响打包系统的用户选项。”开始。 - phils
你可以使用 after-init-hook 来在正常的包初始化完成后评估自定义代码。例如:(add-hook 'after-init-hook 'my-after-init-hook) (defun my-after-init-hook () ...) - phils

1
使用命令touch ~/.emacs.d/elpa/archives/-pkg添加一个文件(而非目录),这对我解决了问题。

0

我认为如果您手动在以下位置创建一个目录,问题可能会消失:

c:/Documents and Settings/Carlos/Datos de programa/.emacs.d/elpa/archives/-pkg

0
在我的情况下,我不得不添加这个指令来告诉emacs它可以在哪里找到所需的文件:
首先是这一行
(add-to-list 'load-path "~/.emacs.d/")

所需的软件包...

(require 'package)
(add-to-list 'package-archives
             '("marmalade" . "http://marmalade-repo.org/packages/") t)
(package-initialize)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接