package-initialize: Argument des falschen Typs: arrayp, nil

29

Beim Durchlaufen der Emacs als AC / C ++ - Editor bin ich auf die folgenden Codezeilen gestoßen, die in meine ~/.emacsDatei aufgenommen werden müssen, um eine Verbindung melpa archivesfür die Paketinstallation herzustellen

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

nachdem ich diese wrong type argument: arrayp, nilzeilen in emacs gespeichert habe, wird mir beim starten von emacs ein im minibuffer-bereich angezeigt

Als ich es versuchte $ emacs --debug -init, bekam ich:

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()

Ich bin neu in Emacs. Kann mir jemand sagen, wie ich das beheben kann?

Lazarus
quelle

Antworten:

41

Ich bin neulich darauf gestoßen. Ich denke, es wurde durch eine ungültige Paketarchivdatei verursacht. Die sofortige Lösung ist das Löschen <user-emacs-directory>/elpa/archives/melpa/archive-contents; es wird am nächsten wieder aufgebaut package-initialize. Package.el ist für diese Art von Fehlern leider nicht sehr robust.

Shosti
quelle
Sie haben Recht, es hat für mich ungefähr 12 Stunden geklappt, dann kam dieses Problem plötzlich aus dem Nichts. Abgesehen von vielen Paketen, die in der Tutorial-Serie erwähnt wurden, sind sie nicht im Standard elpa.gnu.org enthalten.
Lazarus
Gibt es keine andere Alternative, um dieses Problem zu lösen?
Lazarus
Ich denke, es ist wahrscheinlich ein Fehler in MELPA (verbunden mit einem Mangel an Ausfallsicherheit in package.el). Vielleicht möchten Sie dort ein Problem melden.
Shosti
Nicht sicher, ob es relevant ist, aber die Adresse für das Repository hat sich geändert: jetzt empfiehlt es:(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
rvf0068
Nach einem Paket-Upgrade ist das gleiche Problem aufgetreten. Das Update funktionierte wie ein Zauber. Vielen Dank.
Rkachach
3

Ich hatte das gleiche Problem und habe das folgende Update angewendet. Das hat bei mir funktioniert:

  • Ändern Sie die Adresse für das Melpa-Archiv in: " http://melpa.org/packages "
  • Löschen Sie die Datei ~ / .emacs.d / elpa / archives / melpa / archive-contents
  • Führen Sie package-initialize und package-refresh-contents aus.

Ich habe einen Befehl zum Aktualisieren des Inhalts von Paketen in meiner .emacs-Datei. Dies stellt sicher, dass die Pakete immer auf dem neuesten Stand sind, erhöht jedoch die Startzeit von Emacs um etwa zwei Sekunden.

Meine paketbezogenen Befehle in .emacs sehen folgendermaßen aus:

;; 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)))
Thorkil Værge
quelle
Ich habe dieses Problem ziemlich oft. Ich frage mich, ob es eine Möglichkeit gibt, das Löschen der Datei ~ / .emacs.d / elpa / archives / melpa / archive-contents zu automatisieren, wenn dieses Problem auftritt.
Thorkil Værge
1
Meinen Sie alias rm_archive='rm -r <user-emacs-directory>/elpa/archives/melpa/archive-contents'in Ihrer ~/.bashrcAkte?
snd