6

Python と IPython の EPD バージョンを使用しています。easy_install を使用していくつかのモジュールをインストールした後、それらはインポートできますが、タブで補完できないことに気付きました。それらはパス上に存在しますが、含まれているモジュール (pylab、readline、math)は完成できますが、これらの新しいモジュールは完成できません。

問題を見つけるために何を調べる必要があるか知っている人はいますか? パッケージが他のモジュールと同じ場所にあることを確認しました。

In [1]: import pylab

In [2]: pylab
Out[2]: <module 'pylab' from '/Library/Frameworks/Python.framework/Versions/5.0.0/lib/python2.5/site-packages/pylab.pyc'>

In [3]: import BeautifulSoup

In [4]: BeautifulSoup
Out[4]: <module 'BeautifulSoup' from '/Library/Frameworks/Python.framework/Versions/5.0.0/lib/python2.5/site-packages/BeautifulSoup-3.1.0.1-py2.5.egg/BeautifulSoup.pyc'>

多分何かが.eggs正しく処理されていませんか?ありがとう。

更新: gnibbler の投稿をフォローアップすると、タブ補完が次の completer.py の 633 行目で例外にヒットすることがわかりました。

    try:
        ret = self.matches[state].replace(magic_prefix,magic_escape)
        return ret
    except IndexError:
        return None

しかし、失敗の原因は…

更新

In [5]: from Bea<tab_here>
*** COMPLETE: <Bea> (0)
matches: []
state: 0

したがって、これは、一致リストが空のセットであると言っているだけです。一致するものはありません。まだモジュールが見つかりません。matches時間があるときに、探しているモジュールをどこで取得しているかを調査してみます。

4

3 に答える 3

13

この振る舞いにうんざりした後、昨日、この質問に対する答えを見つけました。

IPython には、 で見つけることができるすべてのモジュールを含む単純なデータベースがあるようですsys.path。新しいモジュールをインストールするたびに、マジックを書かなければなりません

In [1]: %rehashx

IPython がデータベースを再生成するようにします。次に、新しいモジュールのタブ補完を行うことができます。

于 2010-09-02T21:04:23.623 に答える
2

Ipython/completer.py の最後に次のコードがあります。


        except:
            #from IPython.ultraTB import AutoFormattedTB; # dbg
            #tb=AutoFormattedTB('Verbose');tb() #dbg
# If completion fails, don't annoy the user. return None

おそらく、コメントを外すと手がかりが得られます

于 2009-10-12T06:20:44.557 に答える
0

ローカルにインストールされた非卵モジュールは、実行時に名前をタブで補完できますがimportモジュールはできません (IPython 0.10、Python 2.6.2、Mac OS X)。

IPython で機能リクエスト / バグ レポートを提出することをお勧めします。

于 2009-10-12T07:35:53.230 に答える