ST3 + Anaconda Python 自动完成无用的建议

ST3 + Anaconda Python autocomplete useless suggestions

我正在尝试将 ST3 配置为 IDE 用于我的 Python 开发。

这是一段代码:

from __future__ import division
from sklearn import datasets
import numpy as np
def main():
    ds = datasets.load_boston()
    x = ds.data
    y = ds.target
    x.ravel()
if __name__ == '__main__':
    main()

这是我的 Preferences.sublime-settings 设置:

{
"color_scheme": "Packages/Theme - Flatland/Flatland Dark.tmTheme",
"theme": "Flatland Dark.sublime-theme",
"flatland_sidebar_tree_xsmall": false,
"flatland_square_tabs": true,

"auto_complete_delay": 10,
"auto_complete_triggers":
[
    {
        "characters": ".",
        "selector": "source.python - string - comment - constant.numeric"
    }
],

"font_size": 12,
"tab_size": 4,
"translate_tabs_to_spaces": true,

"caret_extra_bottom": 1,
"caret_extra_top": 1,
"caret_extra_width": 1.2,
}

这是我的 Anaconda.sublime-设置

{
"anaconda_linter_mark_style": "none",
"anaconda_linter_underlines": false,
"suppress_word_completions": true,
"suppress_explicit_completions": true,
"enable_signatures_tooltip": true,
"merge_signatures_and_doc": true,
"pep8_ignore":
[
    "E305",
    "E309",
    "E501",
    "E112",
    "W291"
]
}

这是我所有已安装软件包的列表:

我的问题如下:

1.) 如果我输入 ds. 自动完成不会提示 datatarget , 但它们应该是有效的建议。

2.) 如果我键入 ds. 自动完成建议建议如下:from、if、def 等...我相信自动完成扫描整个文本文件并添加来自字符串的建议在里面。有没有办法禁用它并让它只建议相关的(函数、方法和成员变量)建议?

3.) x 是具有方法 ravel() 的 np.array 类型。再一次,不建议使用这种方法。这真的不是我期望的自动完成功能。

非常感谢任何帮助! 亲切的问候

Jedi(anaconda 用来提供自动完成功能的库)在完成 NumPy 和其他科学库方面存在已知问题。例如 https://github.com/davidhalter/jedi/issues/372

有关 NumPy 的未解决问题的完整列表(可能其中一些是重复的):https://github.com/davidhalter/jedi/search?q=numpy&state=open&type=Issues&utf8=%E2%9C%93

这就是为什么你没有得到 NumPy 数组的完成,继续,目前 anaconda 不能为你提供 NumPy 的自动完成,因为 Jedi 不能为它提供自动完成。

我想补充一点,我找到了一个非常丑陋的解决方法,但可能对其他人有用。

代码片段:

from __future__ import division
from sklearn import datasets
import numpy as np
def main():
    ds = datasets.load_boston()
    x = ds.data
    y = ds.target
    assert isinstance(x, np.ndarray)
    x.ravel()         # Autocomplete for x now works.

if __name__ == '__main__':
    main()

numpy 的自动完成在 assert 语句后起作用。

看来 Jedi 需要一点提示。