为什么Spyder 3.1中的自动完成选项在编辑器中无法完全运行?

Ale*_*dro 8 python autocomplete spyder

在Mac Sierra上运行,Spyder(来自Anaconda发行版)的自动完成似乎非常不稳定.从Ipython控制台使用时,按预期工作.但是,当从编辑器中使用时(这是我的主要写作方式),是不稳定的.对于某些模块,例如pandas或matplotlib,自动完成工作(即,当按下TAB时会出现一个显示选项的小框).所以写'pd.' 然后点击TAB,按预期获得带有选项的框.但是,许多其他对象不会发生这种情况:例如,在定义名为"df"的数据框之后,键入"df".TAB什么都没显示.在Ipython控制台中,'df.' TAB将显示该数据帧的可用过程,例如groupby,以及它的列等.

所以问题是三重的.首先,是否有任何特定的配置应该启用以使其工作?我不这么认为,考虑到花时间谷歌搜索,但只是想确定.其次,有人可以说明在自动完成方面哪些有效,哪些无效的官方用语(例如,哪些特定模块在编辑器中起作用,哪些不起作用?).最后,编辑器和Ipython控制台在与Spyder实现自动完成功能方面存在差异的技术方面是什么?我读了一些关于Jedi vs. PsychoPy模块的内容,所以很好奇(但请记住,虽然我有科学经验,但我对计算相对较新,所以对于受过教育但不是专家的人来说,请保持相当简单).

更新:作为一个附带问题,很高兴知道为什么Rodeo(另一个IDE)中的自动完成更好.它比Spyder更新,总体选项更少,但自动完成功能在编辑器中完美运行.

Car*_*oba 10

(Spyder开发者在这里)

我的答案:

是否有任何特定的配置应该启用以使其工作?

在Spyder 3.1中,我们添加了numpydoc库以改进某些对象的完成(如Matplotlib图和NumPy数组).如果Dataframe完成对您不起作用(它们适合我),请在Github上的问题跟踪器中打开一个问题来跟踪并解决此问题.

有人可以说一下在自动完成方面哪些有效,哪些无效的官方用语(例如哪些特定模块可以在编辑器中起作用,哪些不起作用?)

当一个对象是由C/C++/Fortran而不是Python开发的函数或方法生成时,最困难的部分是完成定义的完成.我的意思是,像

import numpy as np
a = np.array([])
a.<TAB>
Run Code Online (Sandbox Code Playgroud)

正如我所说,现在应该对数组,数字和数据帧起作用,但它并不适用于所有库(大多数科学Python库都是用C/C++/Fortran创建的,并且用Python包装以提高速度).

问题是我们使用的完成库(Rope和Jedi)不能很好地处理这种情况,因为array(例如)不能以静态方式进行内省(即没有运行涉及它的代码).因此,我们不得不求助于分析array文档字符串以查看其返回类型和内省的技巧.

编辑器和Ipython控制台在与Spyder实现自动完成功能方面的差异有哪些技术方面?

最重要的区别是,在IPython控制台中,您必须先运行代码才能获得完成.例如,请在新的IPython控制台中运行它

In [1]: import pandas as pd
   ...: df = pd.Da<Tab>
Run Code Online (Sandbox Code Playgroud)

并且你会发现它不会返回任何完成Da(显然应该返回Dataframe).

但是,经过评估,获得完成非常简单.你可以简单地跑

dir(pd)
Run Code Online (Sandbox Code Playgroud)

得到它们(这就是IPython本质上在内部所做的).

另一方面,Spyder的编辑器没有运行代码的控制台,因此必须通过在代码中运行静态分析工具(如Jedi和Rope)来完成.正如我所说,他们在不运行代码的情况下反省代码.虽然它们对于纯Python代码非常有效,但它们存在我上面针对编译库所描述的问题.

并且尝试评估编辑器中的代码以获得完成通常不是一个好主意,因为:

  1. 它不一定是有效的Python代码.例如,假设您在某处留下了一个未闭合的括号,但您希望在某个其他位置获得完成.这应该没有问题,对吗?

  2. 它可能涉及非常昂贵的计算(例如,在Dataframe中加载一个巨大的CSV),因此每次进行完成评估它(这是必须的,因为每次要求完成时代码都不同)可能会占用所有的RAM.眨.

很高兴知道为什么Rodeo(另一个IDE)的自动完成性更好

上次我检查(几年前),Rodeo评估了您的代码以获得完成.但是,我们将看看他们现在正在做什么,看看我们是否可以改进我们的完井机械.

  • 男孩,这是我在Stackoverflow中写的最长的答案!! 我将它用作这个主题的参考,因为它在我们(受挫的)用户中出现了很多:) (2认同)

小智 5

如果项目工作目录路径中没有空格,自动完成功能会正常工作。


hem*_*nto 5

Autocomplete was not working for me at all. So, I tried Tools -> Reset Sypder to factory defaults and it worked.