Правильный инструмент для этой работы - pkgutil.walk_packages.
Чтобы вывести список всех модулей в вашей системе:
import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):
print(modname)
Учтите, что walk_packages импортирует все подпакеты, но не подмодули.
Если вы хотите перечислить все подмодули определенного пакета, вы можете использовать что-то вроде этого:
import pkgutil
import scipy
package=scipy
for importer, modname, ispkg in pkgutil.walk_packages(path=package.__path__,
prefix=package.__name__+'.',
onerror=lambda x: None):
print(modname)
iter_modules перечисляет только модули, которые имеют одноуровневую глубину.
walk_packages получает все подмодули.
Например, в случае с scipy walk_packages возвращает
scipy.stats.stats
пока iter_modules возвращает только
scipy.stats
Документация по pkgutil (http://docs.python.org/library/pkgutil.html)
не перечисляет все интересные функции, определенные в
/usr/lib/python2.6/pkgutil.py.
Возможно, это означает, что функции не являются частью "открытого" интерфейса и могут быть изменены.
Однако, по крайней мере, начиная с Python 2.6 (и, возможно, более ранних версий?)
pkgutil поставляется с методом walk_packages, который рекурсивно просматривает все
Доступные модули.