首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法安装要求org的melpa软件包

无法安装要求org的melpa软件包
EN

Stack Overflow用户
提问于 2014-08-13 09:25:00
回答 1查看 1.9K关注 0票数 1

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

代码语言:javascript
复制
(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的问题与此有关?

EN

回答 1

Stack Overflow用户

发布于 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-contriborg),所以不能使用它来解决与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。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25282628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档