def find_dotted(names, parentdir=None):
"""
Dotted import. 'names' is a list of path components, 'parentdir' is the
parent directory.
"""
filename = None
for name in names:
mod = ImpImporter(parentdir).find_module(name)
if not mod:
break
filename = mod.get_filename()
if not filename:
break
parentdir = dirname(filename)
else:
return filename
python类ImpImporter()的实例源码
def load_plugins():
loaded_files = []
for module in pkgutil.iter_modules():
if six.PY3 and not isinstance(module, tuple):
file_path = '%s/%s/plugins.py' % (module.module_finder.path, module.name)
if file_path not in loaded_files:
load_plugin_from_path(file_path)
loaded_files.append(file_path)
elif six.PY3 or isinstance(module[0], pkgutil.ImpImporter):
file_path = '%s/%s/plugins.py' % (module[0].path, module[1])
if file_path not in loaded_files:
load_plugin_from_path(file_path)
loaded_files.append(file_path)
# -----------------
# API ENTRY POINTS
# -----------------
def test_importer_deprecated(self):
with self.check_deprecated():
x = pkgutil.ImpImporter("")
def test_importer_deprecated(self):
with self.check_deprecated():
x = pkgutil.ImpImporter("")
def find_mod(modname, fn):
print '\n\n\n-----', modname, fn
mod = ImpImporter().find_module(modname)
print 'global', mod, mod and mod.get_filename()
mod = ImpImporter(dirname(fn)).find_module(modname)
print 'local', mod, mod and mod.get_filename()
try:
mod = find_module(modname)
except ImportError:
mod = 'ERROR'
print 'imp global', mod
try:
mod = find_module(modname, dirname(fn))
except ImportError:
mod = 'ERROR'
print 'imp local', mod
## print find_module('ctypes.util')
## print find_module('util', '/usr/lib/python2.5/ctypes/__init__.py')
## raise SystemExit
def test_importer_deprecated(self):
with self.check_deprecated():
x = pkgutil.ImpImporter("")
def load_plugins(scope=None):
scope = scope or PLUGIN_SCOPE_SERVICES
if PLUGINS_LOADED.get(scope, None):
return
setup_logging()
loaded_files = []
result = []
for module in pkgutil.iter_modules():
file_path = None
if six.PY3 and not isinstance(module, tuple):
file_path = '%s/%s/plugins.py' % (module.module_finder.path, module.name)
elif six.PY3 or isinstance(module[0], pkgutil.ImpImporter):
if hasattr(module[0], 'path'):
file_path = '%s/%s/plugins.py' % (module[0].path, module[1])
if file_path and file_path not in loaded_files:
plugin_config = load_plugin_from_path(file_path, scope=scope)
if plugin_config:
result.append(plugin_config)
loaded_files.append(file_path)
# set global flag
PLUGINS_LOADED[scope] = result
return result
# -----------------
# API ENTRY POINTS
# -----------------