help("modules")
может занять много времени, поскольку он должен импортировать каждый модуль до того, как я t может искать путь этого модуля для подмодулей. Это может быть проблемой, если какой-либо модуль имеет код за пределами защитного устройства if __name__ == "__main__":
, и если этот код ожидает ввода пользователем или вводит бесконечный цикл или зависает по любой другой причине.
Под капотом help("modules")
вызывает pkgutil.walk_packages
, в котором проявляется вышеупомянутое поведение «импортировать все». В качестве альтернативы вы можете позвонить iter_modules
, который не импортирует все, с недостатком только итерации модулей верхнего уровня.
>>> import pkgutil
>>> print [tup[1] for tup in pkgutil.iter_modules()]
['colorama', 'xlrd', 'BeautifulSoup', 'BeautifulSoupTests', '_ctypes', ...
#snip...
..., 'pywin', 'win32ui', 'win32uiole']
Это также пропустить некоторые встроенные модули, которые вы можете получить отдельно с помощью sys
.
>>> import sys
>>> sys.builtin_module_names
('__builtin__', '__main__', '_ast', '_bisect', '_codecs', ...
#snip...
..., 'thread', 'time', 'xxsubtype', 'zipimport', 'zlib')
Удивительный! Вы также можете увидеть все элементы в классе, используя это. Благодаря! – Dan