Вкладка IPython дополняет только некоторые модули

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

    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 ответа

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

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

In [1]: %rehashx

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

Прямо в конце Ipython/completeter.py это код:


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

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

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

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

Другие вопросы по тегам