Odpowiednim narzędziem do tego zadania jest pkgutil.walk_packages.
Aby wyświetlić wszystkie moduły w systemie:
import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):
print(modname)
Należy pamiętać, że walk_packages importuje wszystkie podpakiety, ale nie moduły podrzędne.
Jeśli chcesz wyświetlić wszystkie podmoduły określonego pakietu, możesz użyć czegoś takiego:
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 wyświetla tylko te moduły, które są głębokie na jeden poziom. walk_packages pobiera wszystkie moduły podrzędne. Na przykład w przypadku scipy zwraca walk_packages
scipy.stats.stats
podczas gdy iter_modules tylko zwraca
scipy.stats
Dokumentacja pkgutil ( http://docs.python.org/library/pkgutil.html ) nie zawiera wszystkich interesujących funkcji zdefiniowanych w /usr/lib/python2.6/pkgutil.py.
Być może oznacza to, że funkcje nie są częścią „publicznego” interfejsu i mogą ulec zmianie.
Jednak przynajmniej od Pythona 2.6 (i być może wcześniejszych wersji?) Pkgutil zawiera metodę walk_packages, która rekurencyjnie przechodzi przez wszystkie dostępne moduły.