A ferramenta certa para esse trabalho é pkgutil.walk_packages.
Para listar todos os módulos em seu sistema:
import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):
print(modname)
Esteja ciente de que walk_packages importa todos os subpacotes, mas não os submódulos.
Se você deseja listar todos os submódulos de um determinado pacote, você pode usar algo assim:
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 lista apenas os módulos que têm um nível de profundidade. walk_packages obtém todos os submódulos. No caso de scipy, por exemplo, walk_packages retorna
scipy.stats.stats
enquanto iter_modules só retorna
scipy.stats
A documentação do pkgutil ( http://docs.python.org/library/pkgutil.html ) não lista todas as funções interessantes definidas em /usr/lib/python2.6/pkgutil.py.
Talvez isso signifique que as funções não fazem parte da interface "pública" e estão sujeitas a alterações.
No entanto, pelo menos a partir do Python 2.6 (e talvez nas versões anteriores?), O pkgutil vem com um método walk_packages que percorre recursivamente todos os módulos disponíveis.