27 lines
926 B
Python
27 lines
926 B
Python
import os
|
|
import imp
|
|
|
|
def module_has_submodule(mod, submod_name):
|
|
# If the module was loaded from an egg, __loader__ will be set and
|
|
# its find_module must be used to search for submodules.
|
|
loader = getattr(mod, '__loader__', None)
|
|
if loader:
|
|
mod_path = "%s.%s" % (mod.__name__.rsplit('.',1)[-1], submod_name)
|
|
x = loader.find_module(mod_path)
|
|
if x is None:
|
|
# zipimport.zipimporter.find_module is documented to take
|
|
# dotted paths but in fact through Python 2.7 is observed
|
|
# to require os.sep in place of dots...so try using os.sep
|
|
# if the dotted path version failed to find the requested
|
|
# submodule.
|
|
x = loader.find_module(mod_path.replace('.', os.sep))
|
|
return x is not None
|
|
|
|
try:
|
|
imp.find_module(submod_name, mod.__path__)
|
|
return True
|
|
except ImportError:
|
|
return False
|
|
|
|
|