2012-06-27 2 views
1

iPython обладает этой превосходной функцией автообновления модулей, и это работает очень хорошо.Поиск импортируемых модулей в Python

В течение самого долгого времени у меня была функция оболочки, которая позволяет мне изменять каталоги до того места, где находится данный модуль. Он делает это, пытаясь импортировать имя модуля из первого аргумента и глядя на его __file__.

Что я хотел бы сделать, это узнать доступные модули, чтобы я мог написать функцию автозаполнения для этого маленького помощника.

Я знаю, что для модуля ввода я могу сделать что-то вроде dir(module_name), и это даст мне то, что мне нужно для этого модуля, но я не уверен, что делать, чтобы узнать, что я могу импортировать, точно так же, как iPython, когда вы сделать что-то вроде:

import [TAB] 

Или

import St[TAB] 

Каких бы Autocomplete всех модулей, импортируемых начинаются с St.

Я знаю, как написать функцию автозаполнения, мне интересно только найти способ узнать, что я могу импортировать.

EDIT:

Рытье через код IPython мне удалось найти точную часть, которая делает работу получать все текущие модули для данной среды:

from IPython.core.completerlib import module_completion 

for module in module_completion('import '): 
    print module 

Причина я Я печатаю результаты, потому что я действительно использую это для завершения ZSH, поэтому мне нужно будет обработать результат.

ответ

0

В качестве отправной точки вы можете перебирать пути в sys.path, ища модули python, так как это именно то, что делает import. Кроме того, Python не будет иметь индекс или что-то для всех модулей, так как импорт разрешается во время выполнения, когда он запрашивается. Вы можете легко предоставить индекс для встроенных модулей, хотя и, возможно, иметь кэш или что-то еще для ранее импортированных модулей.

+0

Это похоже на хорошее начало. Спасибо за предложение – alfredodeza

Смежные вопросы