【问题标题】:Emacs Python Interpreter Is Not Set CorrectlyEmacs Python解释器设置不正确
【发布时间】:2018-09-19 08:35:24
【问题描述】:

全新安装 Linux Mint 18.3 Cinnamon。

还有全新安装的 Gnu Emacs 24.5.1

还有全新安装的 Anaconda3:

 ~ $ conda -version
usage: conda [-h] [-V] command ...
conda: error: the following arguments are required: command
 ~ $ conda -V
conda 4.4.10
 ~ $ python -V
Python 3.6.4 :: Anaconda, Inc.
 ~ $ anaconda -V
anaconda Command line client (version 1.6.9

Emacs 安装了 python-mode、python 和 elpy,通过 ctrl+Enter 执行的 python 代码与 /usr/bin/python 中的可执行文件一起运行,这已经过时了...2.7.2

在命令行执行python

 ~ $ which python
/home/user/anaconda3/bin/python
 ~ $ python
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 18:10:19)

另外,M-x elpy-config 产生一个错误:neither easy install nor pip can be found 非常奇怪,因为 pip 安装了 anaconda3

我不知道如何找到 elpy 使用什么命令来运行 python 或者为什么 elpy-config 不起作用,我假设在某个地方,它被硬编码到 /usr/bin 目录以查找以上所有内容可执行文件,但我没有看到任何地方表明这一点。

【问题讨论】:

  • 在您的控制台中运行 type python$PATH 是什么?是否传播到 Emacs?
  • 不要担心第二个错误“…nor pip can be found”;这只是第一个的自然结果:如果它找到了你的 Python 2.7.2,而你没有那个 Python 2.7.2 的 pip,它就找不到你的 pip。 (这是一件好事;如果它运行一个 python 和一个不相关的 pip,它会变得非常混乱......)
  • @Prateek:你可能会想到 Windows。
  • which python 产生/home/user/anaconda3/bin/python,路径为:/home/user/anaconda3/bin:/home/user/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/game
  • 在 Emacs 中运行 (getenv "PATH") 会发生什么?在*scratch* 缓冲区中输入它,然后按 C-j 运行它并查看输出。

标签: python emacs elpy


【解决方案1】:

接受的答案很好地解释了正在发生的事情。

如需快速解决方案,请安装此软件包:exec-path-from-shell

它确保每当 emacs 启动一个 shell 来运行某些东西时,它都会使用您的本地 shell 配置,包括对 .bashrc 中的 $PATH 所做的修改

【讨论】:

    【解决方案2】:

    这就是我怀疑发生的事情。

    当您配置$PATH 时,有几种不同的方法可以做到这一点。最常见的方法之一是将其添加到主目录中的.bashrc(或.zshrc.profile,等等)文件中。然而,当你这样做时,这实际上并没有在其他任何地方设置$PATH...仅适用于 shell 本身,以及从 shell 运行的程序。

    您仍然可以从窗口管理器(例如 Gnome、Cinnamon、KDE)启动程序,这些程序将继承 $PATH,而不是从您的 shell,而是从您的 X 登录会话。

    因此,在 .bashrc 中更新 $PATH 后,Emacs 将看不到该路径,因为它不是从 Bash 启动的。

    ASCII 艺术时间

    X 会话 $PATH= + + +---------+ +--------+ v v 终端 Emacs $PATH= + | v 重击 $PATH=/home/user/anaconda3/bin:$PATH

    解决方案 #1:在 .emacs 中更改 $PATH

    这很容易。只需在顶部附近的.emacs 中添加一行,如下所示:

    (setenv "PATH" "/home/user/anaconda3/bin:/home/user/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/game")
    

    这有一些缺点...因为现在您将 $PATH 设置在两个不同的地方,这两个地方可能会彼此不同步(当另一个地方发生变化时,您可能会忘记更新一个)。

    这是我使用的解决方案。

    解决方案 #2:配置 Elpy 以使用您的 Python

    与大多数 Emacs 软件包一样,Elpy 是可配置的。见:https://emacs.stackexchange.com/questions/16637/how-to-set-up-elpy-to-use-python3

    您也许可以使用 M-x customize-group "elpy" 或类似的东西,这意味着您不必手动编辑您的.emacs

    解决方案 #3:为您的 X 会话更改 $PATH

    根据您的设置的具体情况,有不同的方法可以做到这一点。我相信将 $PATH 定义从 .bashrc 移动到 .profile 可能有效,但我已经有一段时间没有这样做了。

    【讨论】:

    • 正如预期的那样,Anaconda3 将 anaconda 目录附加到我的 .bashrc 中,而不是任何更低的位置......我偏爱选项 1,但我会做一些研究,看看是否有一种让 emacs 包含 .bashrc.profile 而不是硬编码的好方法。
    • 从这个answer Steve Purcell 的包exec-path-from-shell 是一个很好的解决方法。
    • 更详细地说,当您安装该软件包时,每次您从 emacs(包括 python shell)中打开一个 shell 时,它都会拉入任何本地配置。我在没有进行任何其他更改的情况下安装了这个包,发现我的问题已解决,elpy 启动 python 3.6.4
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2013-05-16
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多