Lo strumento giusto per questo lavoro è pkgutil.walk_packages.
Per elencare tutti i moduli sul tuo sistema:
import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):
print(modname)
Tieni presente che walk_packages importa tutti i sottopacchetti, ma non i sottomoduli.
Se desideri elencare tutti i sottomoduli di un determinato pacchetto, puoi usare qualcosa del genere:
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 elenca solo i moduli che hanno una profondità di un livello. walk_packages ottiene tutti i sottomoduli. Nel caso di scipy, ad esempio, walk_packages restituisce
scipy.stats.stats
mentre iter_modules restituisce solo
scipy.stats
La documentazione su pkgutil ( http://docs.python.org/library/pkgutil.html ) non elenca tutte le funzioni interessanti definite in /usr/lib/python2.6/pkgutil.py.
Forse questo significa che le funzioni non fanno parte dell'interfaccia "pubblica" e sono soggette a modifiche.
Tuttavia, almeno a partire da Python 2.6 (e forse le versioni precedenti?) Pkgutil viene fornito con un metodo walk_packages che passa in modo ricorsivo attraverso tutti i moduli disponibili.