mirror of
https://github.com/djohnlewis/stackdump
synced 2025-01-22 22:51:36 +00:00
43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
import sys
|
|
import imp
|
|
|
|
def load_module(module_name):
|
|
mod = __import__(module_name)
|
|
components = module_name.split('.')
|
|
for comp in components[1:]:
|
|
mod = getattr(mod, comp)
|
|
return mod
|
|
|
|
def load_module_from_name(filename, module_name):
|
|
if module_name in sys.modules:
|
|
return sys.modules[module_name]
|
|
init_filename = os.path.join(os.path.dirname(filename), '__init__.py')
|
|
if not os.path.exists(init_filename):
|
|
try:
|
|
f = open(init_filename, 'w')
|
|
except (OSError, IOError), e:
|
|
raise IOError(
|
|
'Cannot write __init__.py file into directory %s (%s)\n'
|
|
% (os.path.dirname(filename), e))
|
|
f.write('#\n')
|
|
f.close()
|
|
fp = None
|
|
if module_name in sys.modules:
|
|
return sys.modules[module_name]
|
|
if '.' in module_name:
|
|
parent_name = '.'.join(module_name.split('.')[:-1])
|
|
base_name = module_name.split('.')[-1]
|
|
parent = load_module_from_name(os.path.dirname(filename),
|
|
parent_name)
|
|
else:
|
|
base_name = module_name
|
|
fp = None
|
|
try:
|
|
fp, pathname, stuff = imp.find_module(
|
|
base_name, [os.path.dirname(filename)])
|
|
module = imp.load_module(module_name, fp, pathname, stuff)
|
|
finally:
|
|
if fp is not None:
|
|
fp.close()
|
|
return module
|