3

我有一个问题:

  • 为了运行Anaconda,我需要取消设置 LD_LIBRARY_PATH
  • 为了运行 Emacs(以及其他程序),我需要设置 LD_LIBRARY_PATH

如果我尝试在取消设置时运行EmacsLD_LIBRARY_PATH我会遇到链接问题,例如

symbol lookup error: /usr/lib64/libpangocairo-1.0.so.0: undefined symbol:
cairo_ft_font_options_substitute

如果我尝试加载gedit或其他程序,我会遇到同样的问题。鉴于此,我目前无法在同一环境中使用 Anaconda 和 Emacs。

这使我无法使用需要正常运行的 Python 环境(特别是emacs-jedi需要epc )的Emacs 包,例如emacs-jedi(用于编辑和调试 Python 代码的出色包)。

关于如何规避这个问题的任何想法?(注意:我没有root权限)

更新:

  • 我已经尝试$ANACONDA/lib在我的 current之前添加LD_LIBRARY_PATH,但这也会导致我上面描述的符号查找错误。
  • 我也尝试过更新$PATH$LD_LIBRARY_PATH在我的.emacs文件上,把它放在顶部但没有运气:

    (setenv "PATH" (concat "/home/josh/installs/conda/1.7.0/bin/:" (getenv "PATH")))
    (setenv "LD_LIBRARY_PATH" (concat "/home/josh/installs/conda/1.7.0/lib/:" (getenv "LD_LIBRARY_PATH")))
    
  • 这是更详细地解释了我得到的错误的线程:Linking questions with Anaconda when using LD_LIBRARY_PATH

4

3 回答 3

1

有几种方法可以修复它,但可能这是最简单的(未经测试)。

(defadvice jedi:start-server (around my-jedi:start-server-ld-library-path-hack
                                     activate)
  "Unset LD_LIBRARY_PATH when starting Jedi server."
  (let ((process-environment (mapcar #'identity process-environment)))
    (setenv "LD_LIBRARY_PATH")          ; unset $LD_LIBRARY_PATH
    ad-do-it))

如果这可行,也许在 Jedi.el 中拥有它会更好。我可以想象,有时LD_LIBRARY_PATH对项目进行更改是有用的。

修复它以在 Emacs 之外运行 Jedi EPC 服务器的其他方法之一(例如,在终端中)。这样,您可以轻松控制任何环境变量。对于初学者,请参阅: http ://tkf.github.io/emacs-jedi/latest/#jedi:toggle-debug-server

于 2014-03-13T23:58:40.280 回答
0

可能您不需要取消设置 LD_LIBRARY_PATH 来运行 Anaconda,但是以 Anaconda 库优先的方式对其进行更改。

您是否尝试过 LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH?(一般来说不安全,但在这种情况下可能会有所帮助)

你用什么外壳?如果您在不取消设置 LD_LIBRARY_PATH 的情况下运行 Anaconda,您会遇到什么错误?LD_LIBRARY_PATH 的价值是多少?

您可以将 emacs 别名为“LD_LIBRARY_PATH= emacs”,因此具有正确路径的 emacs 具有正确的路径,但您的大多数其他二进制文件在该会话中将无用。

或者,您可以将 anaconda 二进制文件别名为“LD_LIBRARY_PATH=。”

于 2013-10-07T15:34:17.663 回答
0

你为什么不做这样的事情:

alias emacs="LD_LIBRARY_PATH='whatever' sh -c 'echo \$HOME'"
alias emacs="LD_LIBRARY_PATH='whatever' bash -c '/usr/bin/emacs \${@:0}'"

也许你必须改变/usr/bin/emacs路径。

我从我尝试过的东西中得出它:

alias asdf="HOME=asf bash -c 'echo \$HOME \${@:0}'"
于 2013-12-14T21:46:12.627 回答