【问题标题】:IPython tab completes only some modulesIPython 选项卡仅完成一些模块
【发布时间】:2010-12-05 21:28:29
【问题描述】:

我正在使用 EPD 版本的 python 和 IPython。在使用 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 的帖子,我发现 tab 补全在 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 在哪里获取它正在寻找的模块。

【问题讨论】:

  • 你的意思是 import Be 不起作用?或 BeautifulSoup。 不起作用?
  • 前者。手动输入名称并导入后,模块成员的制表符补全启动。
  • 同样的问题,在 Mac OS X 上使用 Python 2.6.2 和 IPython 0.10...
  • IndexError 表示状态不匹配。您可以尝试在异常处理程序中打印它们吗?

标签: python module ipython tab-completion enthought


【解决方案1】:

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

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

In [1]: %rehashx

以便 IPython 重新生成其数据库。然后你可以对新模块进行 TAB 补全。

【讨论】:

    【解决方案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

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

    【讨论】:

    • 不走运。没有什么是“详细”关于缺乏完成的。
    【解决方案3】:

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

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

    【讨论】: