【问题标题】:emacs: load-path and require (cannot open load file)emacs:加载路径和要求(无法打开加载文件)
【发布时间】:2013-05-27 05:32:03
【问题描述】:

我在(require 'org-mime) 出现"Cannot open load file" 错误,而加载路径变量似乎没问题:

load-path is a variable defined in `C source code'.
Its value is
("/home/alexey/.emacs.d/elpa/bbdb-20130526.1945" "/home/alexey/.emacs.d/elpa/org-mime-20120112" "/home/alexey/.emacs.d/elpa/smex-20130421.2153" "/usr/share/emacs/24.3/site-lisp" "/usr/share/emacs/site-lisp" "/usr/share/emacs/24.3/lisp
...

奇怪的是,补救措施看起来像这样(.emacs):

(add-to-list 'load-path "~/.emacs.d/elpa/org-mime-20120112")

它不仅仅是丑陋的:它是功能失调的,因为版本化的路径可能会发生变化。但是为什么会出错呢?

【问题讨论】:

  • 如果你使用 elpa 系统,你需要先做 (require 'package) (package-initialize) 否则 emacs 甚至不会看到加载路径。 (我认为。)
  • 这可能是您的 .emacs 中的排序问题,导致 (require 'org-mime) 在正确设置 load-path 之前运行。

标签: emacs elisp require load-path


【解决方案1】:

当您加载需要另一个文件的文件时,会发生一个有趣的问题——需要的文件必须在下一个文件之前按时间顺序加载。例如,如果 B 需要 A,那么 A 必须按时间顺序放在更高的位置,这样当 B 加载时,A 已经加载。

我对这种类型的设置非常幸运。大多数文件以 el 或 elc 结尾,所以我不确定为什么要加载具有不同扩展名或没有扩展名的文件,但如果你愿意,当然可以这样做。

(let* ((root.d "~/") (sub-dir (concat root.d ".emacs.d/")))
    (load-file (concat sub-dir "init.el"))
    (setq load-path
(append `(,root.d ,sub-dir
    ,(concat sub-dir "elpa/yasnippet")
) load-path)))

【讨论】:

  • this 这样的东西,或者我收集到的。我无法理解您关于扩展的评论:到目前为止,所有目标都是 *.el。
  • lawlist:如果 B 需要 A(例如它调用(require 'A))并且 A 尚未加载,那么它将在那时加载(假设它在加载路径中,等等。 .)。对require 的调用可确保在需要之前加载所需的库。您无需手动执行任何操作。 (或者,如果这不是您的意思,您不妨澄清一下……)
  • 啊 - - - 谢谢 - 我在尝试新事物时手动添加了很多 el - 我将尝试为我的测试设置一个临时加载路径,看看如果这有帮助 - 最近有一个循环 A 需要 B 和 B 需要 A 的示例来创建 C 的乘积,并且加载路径可能已修复它。总是乐于学习新技巧。 . . :)
  • @Alexey Orlov -- 谢谢 -- 查看数字,我只是假设它是一个文件而不是一个目录 -- 我已经更正了。
猜你喜欢
  • 2014-02-26
  • 1970-01-01
  • 2011-09-14
  • 2015-02-27
  • 2015-03-08
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多