Python 为什么Spyder 3.1中的自动完成选项在编辑器中不能完全工作?

Python 为什么Spyder 3.1中的自动完成选项在编辑器中不能完全工作?,python,autocomplete,spyder,Python,Autocomplete,Spyder,在MacSierra上运行,Spyder中的自动完成(来自Anaconda发行版)似乎非常不稳定。从Ipython控制台使用时,按预期工作。然而,当从编辑器使用时(这是我的主要写作方式),是不稳定的。对于某些模块(如pandas或matplotlib),自动完成功能(即,按TAB键时,会出现一个显示选项的小框)。所以写“pd”并点击TAB键,就会得到一个包含预期选项的框。但是,许多其他对象都不会出现这种情况:例如,在定义了名为“df”的数据帧之后,键入“df.”选项卡不会显示任何内容。在Ipyt

在MacSierra上运行,Spyder中的自动完成(来自Anaconda发行版)似乎非常不稳定。从Ipython控制台使用时,按预期工作。然而,当从编辑器使用时(这是我的主要写作方式),是不稳定的。对于某些模块(如pandas或matplotlib),自动完成功能(即,按TAB键时,会出现一个显示选项的小框)。所以写“pd”并点击TAB键,就会得到一个包含预期选项的框。但是,许多其他对象都不会出现这种情况:例如,在定义了名为“df”的数据帧之后,键入“df.”选项卡不会显示任何内容。在Ipython控制台中,“df.”选项卡将显示该数据帧的可用过程,例如groupby及其列等

因此,问题有三个方面。首先,是否应该启用任何特定配置以使其工作?我不这么认为,考虑到谷歌花了一些时间,但我只是想确定一下。第二,是否有人可以在自动完成方面(例如,哪些特定模块在编辑器中工作,哪些模块不工作)说明什么是官方术语。最后,编辑器和Ipython控制台在Spyder的自动完成性能方面的差异有哪些技术方面?我读了一些关于绝地vs.心理变态模块的书,所以很好奇(不过,请记住,虽然我有科学经验,但我对计算比较陌生,所以对于受过教育但不是专家的人来说,请保持它相当简单)

更新:作为一个附带问题,了解为什么Rodeo(另一个IDE)中的自动完成功能更好会很好。它比Spyder更新,总体选项更少,但自动完成功能在编辑器中运行得非常完美。

(Spyder开发者在此)

我的答案是:

是否应启用任何特定配置以使其正常工作

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

是否有人可以说明在自动完成方面,什么是有效的,什么是无效的(例如,哪些特定模块在编辑器中工作,哪些模块不工作?)

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

import numpy as np
a = np.array([])
a.<TAB>
您将看到,不会返回
Da
的任何补全(当它显然应该返回
Dataframe
时)

但是,经过评估后,获得完整性是非常简单的。你可以直接跑

dir(pd)
获取它们(这就是IPython在内部所做的)

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

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

  • 它不一定总是有效的Python代码。例如,假设您在某个地方留下了一个未闭合的括号,但您希望在其他某个点获得完成。这应该没问题,对吧

  • 它可能涉及非常昂贵的计算(例如,在数据帧中加载一个巨大的CSV),因此每次评估它以获得完成(这是必须的,因为每次请求完成时您的代码都是不同的)可能会在一瞬间消耗掉您所有的RAM

  • 如果知道为什么Rodeo(另一个IDE)中的自动完成更好,那就太好了


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

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

    自动完成对我来说根本不起作用。
    所以,我尝试了工具->将Sypder重置为出厂默认值,结果成功了。

    男孩,这是我在Stackoverflow中写的最长的答案!!我将使用它作为这个主题的参考,因为它在我们(沮丧的)用户中出现了很多:)确实是一个伟大而全面的答案。非常感谢卡洛斯。还有一件事:你能确认一下这是否是Spyder优先考虑的事情吗?关于Rodeo,上周末我彻底检查了这两个IDE,我不得不说它们的自动完成工作非常好和有效。如果你检查一下他们在做什么,你介意回这里更新一下吗?如果能知道Spyder是否有可能改进,或者它是否确实是一个核心的、不可修复的问题,那就太好了。格雷西亚斯·萨卢多斯!如果我们能通过研究牛仔竞技的代码来改进,我会回来找你的。我们还有其他想法来改善这种情况。我可以保证这对我们来说是一个重要的问题,我们已经尽了最大的努力来改进绝地和绳索默认提供的东西。问题是,这是一个非常棘手的问题,Spyder还有很多其他需要注意的事情(调试可能是最重要的一件),因此我们需要一些时间才能达到完美完成的程度。Carlos,请在错误报告中确认一下:您提到自动完成应该对熊猫正常工作。在编辑器中创建一些变量(例如,一个名为“my_data”的标准数据框),键入“my_data”通常会按预期完成到“my_data”,但“my_data”不会执行任何操作。但是,直接在Ipython控制台中,后者确实显示了所有建议(例如.d)
    dir(pd)