Emacs&蟒蛇。链接问题

时间:2013-10-07 14:29:58

标签: python emacs jedi anaconda

我遇到问题:

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

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

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

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

这使我无法使用诸如emacs-jedi(一个用于编辑和调试Python代码的优秀包)的Emacs包,这些包需要一个正常运行的Python环境(特别是emacs-jedi需要epc)。< / p>

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

更新

  • 我尝试将$ANACONDA/lib预先添加到我当前的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 problems with Anaconda when using LD_LIBRARY_PATH

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

可能你不需要为运行Anaconda而取消设置LD_LIBRARY_PATH,而是以这样的方式更改Anaconda库。

您是否尝试过LD_LIBRARY_PATH =。:$ LD_LIBRARY_PATH? (在属中不安全,但在这种情况下可能会有所帮助)

你用什么外壳? 如果你在没有设置LD_LIBRARY_PATH的情况下运行Anaconda会有什么错误? 你对LD_LIBRARY_PATH有什么价值?

你可以将emacs别名为“LD_LIBRARY_PATH = emacs”,这样emacs就有了正确的路径,但你的大多数其他二进制文件在该会话中都没用。

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

答案 2 :(得分: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}'"