Plugin system; imp module head scratch

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Dave

    #1

    Plugin system; imp module head scratch

    Hi, all,

    I'm trying to implement a simple plugin framework, with some
    unexpected results. I'm using Python 2.3.4 on Windows 2000.

    My script loader.py loads plugin packages from a directory (in this
    case its own), and checks a variable defined in the package's
    __init__.py for information on the plugin.

    The directory in which loader.py sits is itself a package::

    plugin_test
    |
    + Plugin1
    | |
    | __init__.py
    |
    __init__.py
    loader.py

    I must be misunderstandin g how the imp module works, or something.
    Although the correct package is returned by my helper method, its
    member variables are those of the the parent package, plugin_test.

    The output of this demo is::

    <module 'Plugin1' from '__init__.pyc'>
    Directory plugin_test

    Which seems contradictory. What have I got wrong?

    Best Regards,

    Dave

    <Code follows>

    This is plugin_test/Plugin1/__init__.py::

    dir = "plugin_tes t/Plugin1"


    This is plugin_test/__init__.py::

    dir = "plugin_tes t"


    And here is the loader script, plugin_test/loader.py::

    import os
    import imp

    def GetPackage(name , peerFile, relPath = '.'):
    """
    Return the named Python package on a
    relative path from the file given
    """
    path = os.path.normpat h(
    os.path.join(os .path.dirname(p eerFile), relPath))
    try:
    fObj, path, descr = imp.find_module (name, [path])
    except ImportError:
    return None
    if descr[2] != imp.PKG_DIRECTO RY:
    return None
    try:
    return imp.load_module (name, None, '', descr)
    except:
    return None

    if __name__ == "__main__":
    pkg = GetPackage("Plu gin1", __file__, '.')
    print pkg
    print "Directory ", pkg.dir
  • Keith Dart

    #2
    Re: Plugin system; imp module head scratch

    Dave wrote:[color=blue]
    > Hi, all,
    >
    > I'm trying to implement a simple plugin framework, with some
    > unexpected results. I'm using Python 2.3.4 on Windows 2000.[/color]

    What would be the difference between a "plugin" and a regular Python module?



    -- ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~
    Keith Dart <kdart@kdart.co m>
    public key: ID: F3D288E4
    =============== =============== =============== =============== =========

    Comment

    • Nick Coghlan

      #3
      Re: Plugin system; imp module head scratch

      Dave wrote:[color=blue]
      > Hi, all,
      >
      > I'm trying to implement a simple plugin framework, with some
      > unexpected results. I'm using Python 2.3.4 on Windows 2000.
      >
      > My script loader.py loads plugin packages from a directory (in this
      > case its own), and checks a variable defined in the package's
      > __init__.py for information on the plugin.[/color]

      Packages and modules are really rather different beasts. I wouldn't be surprised
      to find that 'find_module' and 'load_module' behave strangely when used for
      packages.

      Is there any reason you can't temporarily alter sys.path and use __import__
      normally? The behaviour of that is generally less quirky.


      Anyway, I believe your specific problem is this line:
      return imp.load_module (name, None, '', descr)

      Try replacing the empty string in the third argument with the path returned from
      the find_module call. (At the moment, it is pulling in the __init__.py from the
      current directory, and assigning it to the name you requested)

      Cheers,
      Nick.

      --
      Nick Coghlan | ncoghlan@email. com | Brisbane, Australia
      ---------------------------------------------------------------

      Comment

      Working...