6

我正在使用 Python 和 IPython 的 EPD 版本。在使用 easy_install 安装了一些模块后,我注意到,虽然它们可以被导入,但它们不能通过 tab 完成。它们存在于路径上,但是,虽然包含的模块(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 重新生成其数据库。然后,您可以对新模块进行 TAB 补全。

于 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

本地安装的非 egg模块在执行 时可以使用制表符完成名称import,但egg模块不能(IPython 0.10、Python 2.6.2、Mac OS X)。

我建议使用 IPython 提交功能请求/错误报告!

于 2009-10-12T07:35:53.230 回答