IPython选项卡仅完成一些模块

phy*_*ael 6 python module tab-completion ipython enthought

我正在使用EPD版本的python和IPython.使用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'>
Run Code Online (Sandbox Code Playgroud)

也许某些事情没有.eggs正确处理?谢谢.

更新:关注gnibbler的帖子后,我发现选项卡完成在completer.py的第633行遇到异常:

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

但是造成失败的原因是什么......

更新:

In [5]: from Bea<tab_here>
*** COMPLETE: <Bea> (0)
matches: []
state: 0
Run Code Online (Sandbox Code Playgroud)

所以这只是说匹配列表是一个空集:没有匹配.它仍然没有找到模块.matches当我有时间的时候,我会试着去研究一下它在寻找模块的位置.

Car*_*oba 13

在我厌倦了这种行为之后,昨天我找到了这个问题的答案.

似乎IPython有一个简单的数据库,包含它可以找到的所有模块sys.path.每次安装新模块时都必须编写魔法

In [1]: %rehashx
Run Code Online (Sandbox Code Playgroud)

以便IPython重新生成其数据库.然后,您可以完成新模块的TAB.


Joh*_*ooy 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
Run Code Online (Sandbox Code Playgroud)

也许取消注释会给你一个线索