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