La herramienta adecuada para este trabajo es pkgutil.walk_packages.
Para enumerar todos los módulos de su sistema:
import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):
print(modname)
Tenga en cuenta que walk_packages importa todos los subpaquetes, pero no los submódulos.
Si desea enumerar todos los submódulos de un determinado paquete, puede usar algo como esto:
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 solo enumera los módulos que tienen un nivel de profundidad. walk_packages obtiene todos los submódulos. En el caso de scipy, por ejemplo, walk_packages devuelve
scipy.stats.stats
mientras que iter_modules solo devuelve
scipy.stats
La documentación sobre pkgutil ( http://docs.python.org/library/pkgutil.html ) no enumera todas las funciones interesantes definidas en /usr/lib/python2.6/pkgutil.py.
Quizás esto signifique que las funciones no son parte de la interfaz "pública" y están sujetas a cambios.
Sin embargo, al menos a partir de Python 2.6 (¿y quizás versiones anteriores?) Pkgutil viene con un método walk_packages que recorre recursivamente todos los módulos disponibles.