title: Issues with module imports going from python 2 to python 3
body: <p>I am trying to upgrade a 10 year old event listener that I didn't write from Python 2.7 to python 3.7.  The basic issue I'm running into is the way the original script was importing its plugins.  The idea behind the original script was that any python file put into a "plugins" folder, <em>with</em> a "registerCallbacks" function inside it would auto-load itself into the event listener and run.  It's been working great for lots of studios for years, but Python 3.7 is not liking it at all.<br>
  The folder structure for the original code is as follows:  </p>
  
  <pre><code>EventListenerPackage
      src
          event_listener.py
      plugins
          plugin_1.py
          plugin_2.py
  </code></pre>
  
  <p>From this, you can see that both the event listener and the plugins are held in folders that are parallel to each other, not nested.<br>
  The original code read like this:  </p>
  
  <pre><code># Python 2.7 implementation
  
  import imp
  
  class Plugin(object):
      def __init__(self, path):
          self._path = 'c:/full/path/to/EventListenerPackage/plugins/plugin_1.py'
          self._pluginName = 'plugin_1'
  
      def load(self):
          try:
              plugin = imp.load_source(self._pluginName, self._path)
          except:
              self._active = False
              self.logger.error('Could not load the plugin at %s.\n\n%s', self._path, traceback.format_exc())
              return
  
          regFunc = getattr(plugin, 'registerCallbacks', None)
  </code></pre>
  
  <p>Due to the nature of the changes (as I understand them) in the way that Python 3 imports modules, none of the other message boards seem to be getting me to the answer.<br>
  I have tried several different approaches, the best so far being:<br>
  <a href="https://stackoverflow.com/questions/67631/how-to-import-a-module-given-the-full-path">How to import a module given the full path?</a><br>
  I've tried several different methods, including adding the full path to the sys.path, but I always get "ModuleNotFoundError".<br>
  Here is roughly where I'm at now.  </p>
  
  <pre><code>import importlib.util
  import importlib.abc
  import importlib
  
  class Plugin(object):
      def __init__(self, path):
          self._path = 'c:/full/path/to/EventListenerPackage/plugins/plugin_1.py'
          self._pluginName = 'plugin_1'
  
      def load(self):
          try:
              spec = importlib.util.spec_from_file_location('plugins.%s' % self._pluginName, self._path)
              plugin = importlib.util.module_from_spec(spec)
              # OR I HAVE ALSO TRIED
              plugin = importlib.import_module(self._path)
          except:
              self._active = False
              self.logger.error('Could not load the plugin at %s.\n\n%s', self._path, traceback.format_exc())
              return
  
          regFunc = getattr(plugin, 'registerCallbacks', None)
  
  </code></pre>
  
  <p>Does anyone have any insights into how I can actually import these modules with the given folder structure?
  Thanks in advance.</p>