Finding a module's sub modules at runtime

Joshua J. Kugler joshua at
Tue Apr 3 21:42:14 CEST 2007

On Monday 02 April 2007 16:33, Robert Kern wrote:
>>>>>> help(pkgutil.iter_modules)
>>> Help on function iter_modules in module pkgutil:
>>> iter_modules(path=None, prefix='')
>>>     Yields (module_loader, name, ispkg) for all submodules on path,
>>>     or, if path is None, all top-level modules on sys.path.
>>>     'path' should be either None or a list of paths to look for
>>>     modules in.
>>>     'prefix' is a string to output on the front of every module name
>>>     on output.
>> OK, that looks nice...but what version of Python is that?
>> only shows one function
>> (and that's 2.5) and my python 2.4 installation is similarly lacking an
>> iter_modules() function for the pkgutil module.  Is this a 2.6 thing?
> No, 2.5. The documentation is not up to date. Read the source.

Gotcha.  Thanks...well, since we're using 2.4, that will have to wait.  For
the archives, here is what I've come up with.

Contents of the for a module.

import os
_myDir = __path__[0]

def mod_list():
    A quick hack that retrieves all the sub modules in a directory that has
    an file.  I could use pkgutil.iter_modules, but that is
    Python 2.5 only, and this should work with several versions of Python.
    modList = []
    modHash = {}
    isModule = False
    for ii in os.walk(_myDir):
        if ii[0] == _myDir:
            for f in ii[2]:
                # If there is no __init__ file, then the directory
                # upon which mod_list() is operating is not a module
                if f[0:8] == '__init__':
                    isModule = True
                elif f[-3:] == '.py':
                    modHash[f[:-3]] = True
                elif f[-4:] == '.pyc' or f[-4:] == '.pyo':
                    modHash[f[:-4]] = True
    if isModule:
        modList = modHash.keys()

Hope that helps someone!


Joshua Kugler
Lead System Admin -- Senior Programmer
PGP Key:  ID 0xDB26D7CE

Posted via a free Usenet account from

More information about the Python-list mailing list