Alat yang tepat untuk pekerjaan ini adalah pkgutil.walk_packages.
Untuk mencantumkan semua modul di sistem Anda:
import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):
print(modname)
Ketahuilah bahwa walk_packages mengimpor semua subpaket, tetapi bukan submodul.
Jika Anda ingin membuat daftar semua submodul dari paket tertentu maka Anda dapat menggunakan sesuatu seperti ini:
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 hanya mencantumkan modul dengan kedalaman satu tingkat. walk_packages mendapatkan semua submodul. Dalam kasus scipy, misalnya, walk_packages akan dikembalikan
scipy.stats.stats
sementara iter_modules hanya kembali
scipy.stats
Dokumentasi di pkgutil ( http://docs.python.org/library/pkgutil.html ) tidak mencantumkan semua fungsi menarik yang didefinisikan di /usr/lib/python2.6/pkgutil.py.
Mungkin ini berarti fungsi tersebut bukan bagian dari antarmuka "publik" dan dapat berubah.
Namun, setidaknya pada Python 2.6 (dan mungkin versi sebelumnya?) Pkgutil hadir dengan metode walk_packages yang secara rekursif berjalan melalui semua modul yang tersedia.