Anaconda中Spyder的IPython控制台运行极其缓慢

7

我使用标准的Python安装和IDLE几年后,现在尝试使用Anaconda / Spyder。每次工作会话中,控制台(以及变量浏览器)都会逐渐变慢,并且每运行一个脚本或交互式命令,速度就会更慢。最终,对于简单的命令如 "print",它需要几分钟才能得到响应���然后停止响应,我不得不关闭它。这对我的工作影响很大。

操作系统:Mac OSX 10.13.6

conda version : 4.5.11
conda-build version : 3.15.1
python version : 3.7.0.final.0

qt 5.9.6
spyder 3.3.1 
ipython 7.1.1

我经常使用matplotlib。在脚本的开头和/或结尾处,尽可能使用plt.ioff()和plt.close('all')。在首选项中完全关闭matplotlib支持并不能解决问题,而且这也不是一个永久性的解决方案。Python并没有使用到我所有的CPU或RAM。


1
我最近开始遇到同样的问题,几乎是相同的设置。我还没有找到解决方案,但我发现了这个未解决的问题:https://github.com/spyder-ide/spyder/issues/2902#event-1898390735 - JJR4
@JJR4 不幸的是,那个来自Spyder开发者的回复是在2015年的。不确定他们现在在哪里。 - andbeonetraveler
Spyder维护者在此) 我只想提一下,我们对这个问题非常困惑。我们真的不知道它来自哪里(可能是Python 3.7、IPython 7+或ipykernel5+)。如果你有一些空闲时间来帮助我们缩小生成该问题的确切条件,那么至少我们可以通知Jupyter的开发人员,以便他们来看看它。 - Carlos Cordoba
@CarlosCordoba,GitHub 上是否有关于这个问题的未解决问题?我可以帮忙测试/重现此问题,因为它已经成为了我的主要障碍。 - neal
1
https://github.com/spyder-ide/spyder/issues/2902 - Carlos Cordoba
显示剩余5条评论
5个回答

10

据我所了解,问题似乎出现在最新版本的IPython内核中。 将IPykernel版本固定为4.10.0可解决此问题。 要这样做,请在文件~/anaconda3/conda-meta/pinned中添加一行包含 ipykernel 4.*。 如果文件不存在,请创建它。 然后运行conda update ipykernel,这实际上会将其降级到4.10.0 版本。对我很有效!


9

您不需要降级整个Spyder。 对我而言,将这两个降级版本即可解决问题: conda install ipython=6.4.0 conda install ipykernel=4.10.0


1
我只将 ipykernal 降级到了 4.10.0,而将 ipython 保留在 7.2.0 版本。然后它就可以正常工作了。我对此感到非常高兴!!! - Selah

6

所以这不是一个完全令人满意的解决方案,但它似乎是一个合理的临时修复方法。 如果你将spyder版本降级到3.1.X,你将能够使用Python控制台而不是Ipython控制台,这个方法对我有效。只需运行以下命令:

conda install spyder=3.1

当你的环境处于活动状态时,在终端中使用Python控制台并不理想,因为开发人员出于特定原因删除了Python控制台,如此提到的这个问题,如何在Spyder中添加Python控制台

此外,降级如此之多可能会对代码使用的其他包产生意想不到的影响,并可能导致其他问题,但到目前为止这是我能想到的唯一解决方案。


我使用Spyder 3.3.1,运行非常顺畅。IPython控制台非常迅速,脚本运行器也很快。Spyder似乎是一个非常出色的Python IDE。我对Spyder应用程序没有任何责任,只是一位满意的用户。 - Natsfan
@JJR4 是的,到目前为止这个对我有效。不过,另一个问题是在Python控制台中似乎没有变量浏览器——这是一个特性还是一个错误? - andbeonetraveler
1
@andbeonetraveler 这很奇怪,我有变量浏览器,而且它似乎对我来说正常工作。它完全不存在还是不起作用?如果您转到“查看”>>“窗格”>>“变量浏览器”,则应该能够切换它的开关,您可能需要重新启动才能看到效果。如果变量浏览器中没有显示任何内容,则可以尝试在变量浏览器窗格的左上角使用刷新按钮。 - JJR4
@JJR4 刷新成功,谢谢!我猜可能是由于某些原因它没有自动刷新。 - andbeonetraveler

3

@Sjoerd 谢谢你的答复,这是对我有用的方法。为了更清晰,以下是我在Anaconda 3上的High Sierra终端中所做的操作:

echo "ipykernel 4.10.0" >> ~/anaconda3/conda-meta/pinned

conda update anaconda

当我尝试仅更新ipykernel时,会出现依赖项错误。通过更新anaconda,现在所有内容都已更新,但ipykernel实际上是版本4.10.0。从那以后,我没有遇到任何挂起。


太棒了,这解决了我的问题。我必须更新conda,然后降级ipykernel,尽管(相反的顺序)。 - BossaNova

0

@JJR4的答案对我没用(似乎对其他人有效)。另一个解决方法是在IPython Spyder控制台中键入%connect_info魔术命令,它将显示连接到内核的JSON信息。

魔术命令的输出说明了如何连接,但基本上有三个选项。

将上述JSON粘贴到文件中,并使用以下命令进行连接:

$> jupyter <app> --existing <file>

或者,如果您是本地用户,您可以仅使用以下方式连接:

$> jupyter <app> --existing <kernel>.json

或者仅仅是:

$> jupyter <app> --existing

如果这是您启动的最新Jupyter内核。

我通常使用qtconsole作为应用程序。一旦您将所选的连接方法输入命令行,一个新的控制台将打开,该控制台连接到与Spyder控制台相同的内核。由于某种原因,即使Spyder控制台也不会出现延迟,新的控制台也不会出现延迟。

在新控制台中输入所有内容,甚至包括runfile()

希望这可以帮助您!

更新: 对于我来说,降级到ipykernel版本4.10似乎解决了这个问题。感谢Carlos Cordoba-请参见下面链接中的GitHub对话。


你也在使用 macOS 吗? - Carlos Cordoba
是的,我使用的是macOS 10.12.6。 - Charlie Roe
好的,请在此处发布您的ipykernel、IPython和jupyter_client版本,以查看我们是否可以缩小问题范围。 - Carlos Cordoba
发布为cgit2017。希望你能理解。感谢你的辛勤工作。 - Charlie Roe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接