Вкладка IPython дополняет только некоторые модули - PullRequest
6 голосов
/ 12 октября 2009

Я использую 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'>

Может быть, что-то не правильно обрабатывает .eggs? Спасибо.

Обновление : В ответ на сообщение gnibbler я обнаружил, что завершение вкладки вызывает исключение в строке 633 в completeter.py по адресу:

    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 получает модули, которые ищет, когда у меня есть время.

Ответы [ 3 ]

13 голосов
/ 03 сентября 2010

Я нашел ответ на этот вопрос вчера, после того, как устал от этого поведения.

Кажется, что IPython имеет простую базу данных со всеми модулями, которые он может найти в sys.path. Каждый раз, когда вы устанавливаете новый модуль, вы должны написать магию

In [1]: %rehashx

, чтобы IPython восстанавливал свою базу данных. После этого вы можете выполнить TAB-завершение новых модулей.

2 голосов
/ 12 октября 2009

в самом конце Ipython / completeter.py это код:

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

Возможно, раскомментирование даст вам подсказку

0 голосов
/ 12 октября 2009

Локально установленные, не-egg модули могут иметь свое имя-завершено при выполнении import, но egg модули не могут (IPython 0.10, Python 2.6.2, Mac OS X).

Я бы предложил подать запрос функции / отчет об ошибке с IPython!

...