web-dev-qa-db-ja.com

Spyder 3.1のオートコンプリートオプションがエディターで完全に機能しないのはなぜですか?

Spyderのオートコンプリート(Anacondaディストリビューション)をMac Sierraで実行すると、非常に不安定になります。 Ipythonコンソールから使用すると、期待どおりに動作します。ただし、エディターから使用すると(これは私の主な作成方法です)、不安定になります。 pandas or matplotlib)などの一部のモジュールでは、オートコンプリートは機能します(つまり、TABを押すと小さなボックスが表示され、オプションが表示されます)。「pd。」と入力してTABを押すと、オプション付きのボックスが取得されます。ただし、これは他の多くのオブジェクトでは発生しません。たとえば、「df」という名前のデータフレームを定義した後、「df。」TABと入力すると何も表示されません。Ipythonコンソールでは、「df。」TABは、 groupbyなどのデータフレームとその列など.

したがって、問題は3つあります。まず、これを機能させるために有効にする必要がある特定の構成はありますか?私はそうは思わない、グーグルでいくらかの時間を費やしたことを考えると、ただ確認したいだけだ。次に、オートコンプリートに関して、公式のWordとは何で何が機能し、何が機能しないかを誰かが述べることができますか(たとえば、特定のモジュールがエディターから機能するモジュールと機能しないモジュール)。最後に、SpyderでのオートコンプリートのパフォーマンスにおけるエディターとIpythonコンソールの違いの技術的な側面は何ですか? JediとPsychoPyのモジュールについて何かを読んだので、不思議に思いました(ただし、私は科学的な経験はありますが、私は計算に比較的慣れていないので、教育を受けているが専門家ではないので、かなりシンプルにしてください)。

更新:余談ですが、ロデオ(別のIDE)でオートコンプリートの方が優れている理由を知っておくとよいでしょう。 Spyderよりも新しく、全体的なオプションがはるかに少ないですが、オートコンプリートはエディターで完全に機能します。

8
Alejandro

スパイダー開発者はこちら

私の答え:

これを機能させるために有効にする必要がある特定の構成はありますか?

Spyder 3.1では、numpydocライブラリを追加して、一部のオブジェクト(Matplotlibの図やNumPy配列など)の補完を改善しました。 Dataframe補完が機能しない場合(私にとっては機能します)、Githubの課題トラッカーで課題を開いて、この問題を追跡および解決してください。

オートコンプリートに関して、公式のWordとは何で何が機能しないかを誰かが述べることができますか(例:エディターから機能する特定のモジュールと機能しないモジュール)

最も難しいのは、オブジェクトがPythonではなくC/C++/Fortranで開発された関数またはメソッドによって生成されたときに、定義の完了を取得することです。つまり、

import numpy as np
a = np.array([])
a.<TAB>

私が言ったように、これは配列、図、データフレームで機能するはずですが、すべてのライブラリでは機能しません(そしてほとんどの科学的なPythonライブラリはC/C++/Fortranで作成され、ラップされていますPython)。

問題は、私たちが使用する補完ライブラリ(RopeとJedi)がこのケースをうまく処理できないことです。これは、array(たとえば)が静的な方法で(つまり、コードを実行せずに)イントロスペクトできないためです。したがって、arrayのdocstringを分析して戻り値の型を確認し、代わりにそれをイントロスペクトするようなトリックに頼らなければなりません。

spyderを使用したオートコンプリートのパフォーマンスにおけるエディターとIpythonコンソールの違いの技術的側面は何ですか?

最も重要な違いは、IPythonコンソールでする必要があるコードを実行してから、コードの完了を取得することです。たとえば、これを新しいIPythonコンソールで実行してください

In [1]: import pandas as pd
   ...: df = pd.Da<Tab>

しないDaの補完を返します(明らかにDataframeを返す必要がある場合)。

しかし、評価後、完了を取得するのは非常に簡単です。簡単に実行できます

dir(pd)

それらを取得する(IPythonが本質的に内部で行うことです)。

一方、Spyderのエディターにはコードを実行するためのコンソールがないため、コードで静的分析ツール(JediやRopeなど)を実行して完了を取得する必要があります。私が言ったように、彼らはそれを実行することなくあなたのコードを内省します。それらは純粋なPythonコードに対しては非常にうまく機能しますが、コンパイル済みライブラリに関して上記で説明した問題があります。

また、エディターにあるコードを評価して補完を得ようとすることは、通常、次の理由からお勧めできません。

  1. Pythonコードは常に有効であるとは限りません。たとえば、閉じられていない括弧をどこかに残したが、別の時点で補完を取得したいとします。それは問題なく機能するはずですよね?

  2. これには非常にコストのかかる計算が含まれる可能性があります(Dataframeに巨大なCSVをロードするなど)。完了を取得するために毎回それを評価する必要があります(完了を要求するたびにコードが異なるため、これは必須です)RAM瞬く間に。

オートコンプリートがロデオ(別のIDE)で優れている理由を知ることは素晴らしいことです

前回(数年前)に確認したとき、Rodeoはコードを評価して完了を取得しました。ただし、完成機械を改善できるかどうかを確認するために、彼らが現在何をしているかを調べます。

10
Carlos Cordoba

プロジェクトの作業ディレクトリパスに空白がない場合、オートコンプリートは正しく機能します。

4
ewadaniela

オートコンプリートがまったく機能しませんでした。そこで、[ツール]-> [Spyderを工場出荷時のデフォルトにリセット]を試してみましたが、うまくいきました。

3
hemanto