Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs Python解释器未正确设置_Python_Emacs_Elpy - Fatal编程技术网

Emacs Python解释器未正确设置

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.

新安装的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.
 ~ $ 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")