繁体   English   中英

无法安装需要组织的Melpa软件包

[英]Cannot install melpa packages requiring org

我的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列出了更多el/installed-packages

在启动时,emacs会抱怨

错误:软件包“ org-8.0”不可用

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

令我感到困惑的是,尽管存在org-plus-contrib-$VERSION$ org-$VERSION$文件夹,但~/.emacs.d/elpa子目录不包含org-$VERSION$子文件夹。 似乎package.el不会从org-elpa存档中安装org软件包,而仅安装了org-plus-contrib软件包。 也许orgbox的问题与orgbox有关?

Org是内置软件包,因此始终安装在Emacs中。 因此, (package-installed-p 'org) 始终返回非nil值 ,这将阻止由el/packages-install Org 8。

从Emacs 24.3开始,内置的Org为7.x,但是最新版本不足以满足orgbox的要求。 通常,package.el足够聪明,可以自动安装所需的Org 8.x,但是由于在安装orgbox隐藏了GNU ELPA归档文件,因此package.el无法解决依赖关系,从而导致您看到的错误。

org-version来自org-plus-contrib ,顾名思义,它还包含所有Org Mode,因此Org Mode 8实际上存在于您的Emacs中。 但是,由于软件包名称不同( org-plus-contriborg ),因此不能用于解析对org软件包的依赖关系。

可以说,这是package.el的一个缺点,它不支持“虚拟”和“提供”的软件包,但也是Org Mode打包的结果。

要解决此问题,您可以通过检查package-alist来更改el/package-install以检查Org的安装版本,但我建议您不要混淆该功能中的package-archives 值得注意的是,你应该从列表中删除GNU ELPA,因为它包含必须适用于大多数程序包完全安装必要的软件包。 您在使用此功能时遇到麻烦。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM