Here's how to find all the modules in some directory, and import them. <<TableOfContents>> == Finding Modules in a Directory == Is there a better way than just listing the contents of the directory, and taking those tiles that end with ".pyc" or ".py"..? But perhaps there isn't. {{{ #!python import os def find_modules(path="."): """Return names of modules in a directory. Returns module names in a list. Filenames that end in ".py" or ".pyc" are considered to be modules. The extension is not included in the returned list. """ modules = set() for filename in os.listdir(path): module = None if filename.endswith(".py"): module = filename[:-3] elif filename.endswith(".pyc"): module = filename[:-4] if module is not None: s.add(module) return list(modules) }}} == Importing the Modules == How do you import a module, once you have it's name? With the ImpModule! It dynamically loads named modules. {{{ #!python import imp def load_module(name, path=["."]): """Return a named module found in a given path.""" (file, pathname, description) = imp.find_module(name, path) return imp.load_module(name, file, pathname, description) modules = [load_module(name) for name in find_modules()] }}} == Finding the Things Inside a Module == Once you have your module, you can look inside it, with {{{.__dict__}}}. {{{ #!python module.__dict__ }}} == Finding Functions Within a Module == We just look for dictionary values that are of type {{{types.FunctionType}}}. {{{ #!python def functions_in_module(module) functions = [] for obj in module.__dict__.values(): if isinstance(obj, types.FunctionType): functions.append(obj) return functions }}} == See Also == The DocXmlRpcServer page includes code demonstrating the use of these techniques. = Discussion = I got this error when executing find_modules() in a package directory. That is the directory contained an {{{ __init.py__}}} file: {{{ File "C:\Python254\lib\site-packages\joedorocak\find_modules.py", line 27, in find_modules s.add(module) NameError: global name 's' is not defined }}} It looks to me like s needs to be initialized (some place near "modules = set()"). I'm not sure what the protocol is here, so I'm just going to leave this comment in the discussion. Here's what seems to work for me. I got rid of 's' altogether. {{{ def find_modules(path="."): """Return names of modules in a directory. Returns module names in a list. Filenames that end in ".py" or ".pyc" are considered to be modules. The extension is not included in the returned list. """ modules = set() for filename in os.listdir(path): module = None if filename.endswith(".py"): module = filename[:-3] elif filename.endswith(".pyc"): module = filename[:-4] if module is not None: modules.add(module) return list(modules) }}} All the best, JoeDorocak