text: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from __future__ import unicode_literals
  
  import sys
  import os.path
  
  # We keep references to loaded modules so they don't get garbage collected.
  loaded_modules = []
  
  def load(path):
    basename = os.path.basename(path)
    module_name, extension = os.path.splitext(basename)
    plugin = load_module(module_name, path)
    loaded_modules.append(plugin)
  
  if sys.version_info >= (3, 5):
    import importlib.util
  
    def load_module(module_name, path):
      spec = importlib.util.spec_from_file_location(module_name, path)
      module = importlib.util.module_from_spec(spec)
      spec.loader.exec_module(module)
      return module
  elif sys.version_info >= (3, 3):
    from importlib.machinery import SourceFileLoader
  
    def load_module(module_name, path):
      return SourceFileLoader(module_name, path).load_module()
  else:
    import imp
  
    def load_module(module_name, path):
      return imp.load_source(module_name, path)
  