无法安装需要组织的melpa包

时间:2014-08-13 09:25:00

标签: emacs

我的package.el配置如下所示:

(defvar gnu '("gnu" . "http://elpa.gnu.org/packages/"))
(defvar melpa '("melpa" . "http://melpa.milkbox.net/packages/"))
(defvar org-elpa '("org-elpa" . "http://orgmode.org/elpa/"))


(add-to-list 'package-archives gnu t)
(add-to-list 'package-archives melpa t)
(add-to-list 'package-archives org-elpa t)

(defvar el/installed-packages
  (list
   (list 'org org-elpa)
   (list 'org-plus-contrib org-elpa)
   (list 'orgbox melpa)
  )
"List of packages to be installed")

(package-initialize)

(unless (and (file-exists-p "~/.emacs.d/elpa/archives/gnu")
             (file-exists-p "~/.emacs.d/elpa/archives/org-elpa")
             (file-exists-p "~/.emacs.d/elpa/archives/melpa"))
  (package-refresh-contents))

(defun el/packages-install (packages)
  (mapc (lambda (pkg)
          (let ((name (nth 0 pkg))
                (repo (nth 1 pkg)))
            (when (not (package-installed-p name))
              (message "Downloading '%s' ..." name)
              (let ((package-archives (list repo)))
                (package-initialize)
                (package-install name)))))
        packages)
  (package-initialize)
  (delete-other-windows))

(condition-case nil
    (el/packages-install elinstalled-packages)
  (error
   (package-refresh-contents)
   (el/packages-install el/installed-packages)))

当然,el/installed-packages中列出了更多的软件包。

启动时,emacs会抱怨

  

错误:打包`org-8.0'不可用

,它被列为orgbox包的依赖项。但是,org-version的值为8.2.7c,因此安装不应失败!

让我感到震惊的是~/.emacs.d/elpa子目录不包含org-$VERSION$子文件夹,尽管存在org-plus-contrib-$VERSION$文件夹。似乎package.el未安装org存档中的org-elpa包,只安装了org-plus-contrib包。也许orgbox的问题与此有关?

1 个答案:

答案 0 :(得分:5)

Org是一个内置程序包,因此在Emacs中始终安装。因此,(package-installed-p 'org) 始终返回非零值,这会阻止el/packages-install安装组织8。

从Emacs 24.3开始,内置的组织是7.x,它不够新,不足以满足orgbox的要求。通常,package.el会足够智能自动安装所需的Org 8.x,但由于您在安装orgbox时隐藏了GNU ELPA存档,因此package.el无法解决依赖关系,从而导致出现错误可见

org-version来自org-plus-contrib,正如名称所示 - 也包含所有组织模式,因此组织模式8实际上存在于您的Emacs中。但是,由于程序包名称不同(org-plus-contriborg),因此无法用于解析org程序包的依赖关系。

这可能是package.el的一个短缺,它不支持“虚拟”和“提供”包,但也是凌乱的Org Mode包装的结果。

要解决此问题,您可以通过检查el/package-install来更改package-alist以检查已安装的组织版本,但我建议您不要在该功能中弄乱package-archives 。值得注意的是,您应该从该列表中删除GNU ELPA,因为它包含大多数软件包必须可用的基本软件包才能完全安装。你问这个功能有问题。

在Emacs 24.3中,只有没有合理的方法来将软件包固定到特定的存档。如果您愿意,请更新到Emacs 24.4的最新预测试,并相应地设置package-pinned-archives。如果你这样做,你甚至不需要安装Org,因为Emacs 24.4已经包含Org 8。