簡體   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