Emacs Python解释器未正确设置
新安装的Linux Mint 18.3肉桂 也是Gnu Emacs 24.5.1的新安装 另外,新安装的Anaconda3:Emacs Python解释器未正确设置,python,emacs,elpy,Python,Emacs,Elpy,新安装的Linux Mint 18.3肉桂 也是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.
~ $ 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模式、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
产生一个错误:既找不到easy install也找不到pip
非常奇怪,因为pip
是与anaconda3一起安装的
我不知道如何找到elpy用来运行python的命令,或者为什么elpy config不起作用,我假设在某个地方,它被硬编码到
/usr/bin
目录中,以查找上面所有的可执行文件,但我找不到任何地方表明这一点 这就是我怀疑发生的事情
配置$PATH
时,有几种不同的方法。最常用的方法之一是将其添加到主目录中的.bashrc
(或.zshrc
,.profile
,无论什么)文件中。但是,当您执行此操作时,实际上不会在其他任何位置设置$PATH
。。。仅适用于shell本身以及从shell运行的程序
您仍然可以从窗口管理器(例如Gnome、肉桂、KDE)启动程序,这些程序将继承$PATH
,而不是从shell继承,而是从X登录会话继承
因此,在更新.bashrc
中的$PATH
之后,Emacs将看不到该路径,因为它不是从Bash启动的
ASCII艺术时间
这有一些缺点。。。因为现在您正在两个不同的位置设置$PATH
,这两个位置可能会彼此不同步(当另一个位置发生更改时,您可能会忘记更新一个位置)
这就是我使用的解决方案
解决方案2:配置Elpy以使用Python
与大多数Emacs包一样,Elpy是可配置的。见:
您可以使用M-x自定义组“elpy”或类似的东西,这意味着您不必手动编辑.emacs
解决方案#3:更改X会话的$PATH
根据设置的具体情况,有不同的方法来执行此操作。我相信将
$PATH
定义从.bashrc
移动到.profile
可能会奏效,但我已经有一段时间没有这么做了。公认的答案很好地解释了发生了什么
要获得快速解决方案,请安装此软件包:
它确保每当emacs启动一个shell来运行某个东西时,它都会使用您的本地shell配置,包括对
.bashrc
中的$PATH
所做的修改,并在控制台中运行键入python
。什么是$PATH
?它是否已传播到Emacs?不要担心第二个错误“…也不能找到pip”;这只是第一个问题的自然结果:如果它正在查找Python2.7.2,而您没有Python2.7.2的pip,那么它就找不到您的pip。(这是一件好事;如果它运行的是一个python和一个无关的pip,那么它会变得毫无希望地混乱…@Prateek:你可能会想到Windows。哪一个python
产生了/home/user/anaconda3/bin/python
,路径为:/home/user/anaconda3/bin:/home/user/bin:/home/user/.local/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/usr/games:/usr/local/game
在Emacs中运行(getenv“Path”)
时会发生什么?在您的*scratch*
缓冲区中键入它,然后按C-j运行它并查看输出。正如预期的那样,Anaconda3将anaconda目录附加到my.bashrc
中,而不是下面的任何位置。。。我倾向于选项1,不过我将做一些研究,看看是否有一种好的方法可以让emacs包含.bashrc
或.profile
而不是硬编码。Steve Purcell的软件包是一个很好的解决方法。更详细地说,当你安装该软件包时,每次你从emacs中打开一个shell(包括一个python外壳),它拉入任何本地配置
X Session $PATH=<original $PATH>
+ +
+---------+ +--------+
v v
Terminal Emacs $PATH=<original $PATH>
+
|
v
bash
$PATH=/home/user/anaconda3/bin:$PATH
(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")