Emacs Python 解释器设置不正确

Emacs Python Interpreter Is Not Set Correctly

全新安装 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,python 通过 ctrl+Enter 执行的代码是 运行,可执行文件在 /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 目录来查找上述所有可执行文件,但我看的地方都没有表明这一点。

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

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

运行的程序

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

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

启动的

ASCII 艺术时间

     X Session $PATH=<original $PATH>
           + +
 +---------+ +--------+
 v                    v
Terminal             Emacs $PATH=<original $PATH>
 +
 |
 v
bash
$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 可能会奏效,但我已经有一段时间没有这样做了。

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

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

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