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