Das richtige Werkzeug für diesen Job ist pkgutil.walk_packages.
So listen Sie alle Module auf Ihrem System auf:
import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):
print(modname)
Beachten Sie, dass walk_packages alle Unterpakete importiert, jedoch keine Submodule.
Wenn Sie alle Submodule eines bestimmten Pakets auflisten möchten, können Sie Folgendes verwenden:
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 listet nur die Module auf, die eine Ebene tief sind. walk_packages ruft alle Submodule ab. Im Fall von scipy wird beispielsweise walk_packages zurückgegeben
scipy.stats.stats
während iter_modules nur zurückgibt
scipy.stats
In der Dokumentation zu pkgutil ( http://docs.python.org/library/pkgutil.html ) sind nicht alle in /usr/lib/python2.6/pkgutil.py definierten interessanten Funktionen aufgeführt.
Vielleicht bedeutet dies, dass die Funktionen nicht Teil der "öffentlichen" Schnittstelle sind und Änderungen unterliegen.
Zumindest ab Python 2.6 (und möglicherweise früheren Versionen?) Liefert pkgutil jedoch eine walk_packages-Methode, die alle verfügbaren Module rekursiv durchläuft.