我的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-elpa存档中安装org包,只安装了org-plus-contrib包。也许orgbox的问题与此有关?
发布于 2014-08-13 09:50:52
Org是一个内置的包,因此总是在Emacs中安装。因此,(package-installed-p 'org) 总是返回一个非零值,这会阻止el/packages-install安装Org 8。
在Emacs24.3中,内置的Org是7.x,这还不足以满足orgbox的需求。通常,package.el很聪明,可以自动安装所需的Org8.x,但是由于您在安装orgbox时隐藏了GNU存档,因此package.el无法解决依赖关系,从而导致您看到的错误。
org-version来自org-plus-contrib,顾名思义,它也包含所有的Org模式,因此Org模式8实际上存在于您的Emacs中。但是,由于包名是不同的(org-plus-contrib与org),所以不能使用它来解决与org包的依赖关系。
这可以说是一个短期的package.el,它不支持“虚拟”和“提供”软件包,但也是混乱的Org打包的结果。
要解决此问题,可以通过检查el/package-install来更改package-alist以检查已安装的Org版本,但我建议您不要在该函数中使用package-archives。值得注意的是,您不应该从该列表中删除GNU ELPA,因为它包含了大多数软件包都必须可用的基本包,才能干净地安装。你在这个函数上自找麻烦。
在Emacs24.3中,没有合理的方法将包钉到特定的存档中。如果您想这样做,请更新Emacs24.4的最新预测试,并相应地设置package-pinned-archives。如果这样做,您甚至不需要安装Org,因为Emacs 24.4已经包含了Org 8。
https://stackoverflow.com/questions/25282628
复制相似问题