0001import sys
0002import imp
0003
0004def load_module(module_name):
0005    mod = __import__(module_name)
0006    components = module_name.split('.')
0007    for comp in components[1:]:
0008        mod = getattr(mod, comp)
0009    return mod
0010
0011def load_module_from_name(filename, module_name):
0012    if sys.modules.has_key(module_name):
0013        return sys.modules[module_name]
0014    init_filename = os.path.join(os.path.dirname(filename), '__init__.py')
0015    if not os.path.exists(init_filename):
0016        try:
0017            f = open(init_filename, 'w')
0018        except (OSError, IOError), e:
0019            raise IOError(
0020                'Cannot write __init__.py file into directory %s (%s)\n'
0021                % (os.path.dirname(filename), e))
0022        f.write('#\n')
0023        f.close()
0024    fp = None
0025    if sys.modules.has_key(module_name):
0026        return sys.modules[module_name]
0027    if '.' in module_name:
0028        parent_name = '.'.join(module_name.split('.')[:-1])
0029        base_name = module_name.split('.')[-1]
0030        parent = load_module_from_name(os.path.dirname(filename),
0031                                       parent_name)
0032    else:
0033        base_name = module_name
0034    fp = None
0035    try:
0036        fp, pathname, stuff = imp.find_module(
0037            base_name, [os.path.dirname(filename)])
0038        module = imp.load_module(module_name, fp, pathname, stuff)
0039    finally:
0040        if fp is not None:
0041            fp.close()
0042    return module