package-initialize:错误的类型参数:arrayp,nil


29

在通过emacs作为ac / c ++编辑器进行操作时,我遇到了以下几行代码,它们包含在我的~/.emacs文件中,以进行连接以 melpa archives进行软件包安装

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(package-initialize)

将这些行保存到emacs中之后,当我启动emacs时wrong type argument: arrayp, nil,在minibuffer区域中显示了一个

当我尝试时$ emacs --debug -init,我得到了:

Debugger entered--Lisp error: (wrong-type-argument arrayp nil)
  package--add-to-archive-contents(nil "melpa")
  package-read-archive-contents("melpa")
  package-read-all-archive-contents()
  package-initialize()
  eval-buffer(#<buffer  *load*> nil "/home/anupam/.emacs" nil t)  ; Reading at buffer position 905
  load-with-code-conversion("/home/anupam/.emacs" "/home/anupam/.emacs" t t)
  load("~/.emacs" t t)
  #[0 "\205\262�    \306=\203�\307\310Q\202;�   \311=\204�\307\312Q\202;�\313\307\314\315#\203*�\316\202;�\313\307\314\317#\203:�\320\nB\321\202;�\316\322\323\322\211#\210\322=\203a�\324\325\326\307\327Q!\"\323\322\211#\210\322=\203`�\210\203\243�\330!\331\232\203\243�\332!\211\333P\334!\203}�\211\202\210�\334!\203\207�\202\210�\314\262\203\241�\335\"\203\237�\336\337#\210\340\341!\210\266\f?\205\260�\314\323\342\322\211#)\262\207" [init-file-user system-type delayed-warnings-list user-init-file inhibit-default-init inhibit-startup-screen ms-dos "~" "/_emacs" windows-nt "/.emacs" directory-files nil "^\\.emacs\\(\\.elc?\\)?$" "~/.emacs" "^_emacs\\(\\.elc?\\)?$" (initialization "`_emacs' init file is deprecated, please use `.emacs'") "~/_emacs" t load expand-file-name "init" file-name-as-directory "/.emacs.d" file-name-extension "elc" file-name-sans-extension ".el" file-exists-p file-newer-than-file-p message "Warning: %s is newer than %s" sit-for 1 "default"] 7 "\n\n(fn)"]()
  command-line()
  normal-top-level()

我是emacs的新手,有人可以告诉我如何解决此问题吗?

Answers:


41

前几天我碰到了这个。我认为这是由无效的软件包归档文件引起的。立即修复是删除<user-emacs-directory>/elpa/archives/melpa/archive-contents;它将在下一个重建package-initialize。不幸的是,package.el对于这种故障不是很可靠。


您说的对,它对我有用了大约12个小时,然后突然出现了这个问题。.除了本教程系列中提到的许多软件包都不在标准的elpa.gnu.org中。.–
lazarus

没有其他替代方法可以解决这个问题吗?
lazarus

我认为这可能是MELPA中的错误(加上package.el中缺乏弹性),您可能要在此提交问题。
shosti 2015年

不确定是否相关,但是存储库的地址已更改:现在建议:(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
rvf0068 2015年

升级软件包后,我遇到了同样的问题。该修复程序就像一个魅力。谢谢。
rkachach '16

3

我遇到了同样的问题,并应用了以下修复程序。这为我工作:

  • 将melpa档案的地址更改为:“ http://melpa.org/packages
  • 删除〜/ .emacs.d / elpa / archives / melpa / archive-contents文件
  • 运行package-initialize和package-refresh-contents。

我的.emacs文件中有package-refresh-contents命令。这样可以确保软件包始终是最新的,但会延长emacs的启动时间约两秒钟。

我在.emacs中与包相关的命令如下所示:

;; Package system
(require 'package)
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
                         ("marmalade" . "https://marmalade-repo.org/packages/")
                         ("melpa" . "http://melpa.org/packages/")
                         ("user42" . "http://download.tuxfamily.org/user42/elpa/packages/")))
(package-initialize)

(package-refresh-contents)
(setq auto-install-packages
      '(color-theme bar-cursor htmlize flycheck flycheck-haskell
                    haskell-mode sml-mode rust-mode fsharp-mode nasm-mode go-mode
                    perl-mode web-mode )) ;;ffap-perl-module markdown-mode))
(dolist (pkg auto-install-packages)
  (unless (package-installed-p pkg)
    (package-install pkg)))

我经常遇到这个问题。我想知道是否有一种方法可以在发生此问题时自动删除〜/ .emacs.d / elpa / archives / melpa / archive-contents文件。
ThorkilVærge'16

1
您是alias rm_archive='rm -r <user-emacs-directory>/elpa/archives/melpa/archive-contents'~/.bashrc文件中意思吗?
2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.