Plugin system; imp module head scratch

Dave googlegroups at thuswise.com
Sat Dec 18 20:02:25 EST 2004


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 misunderstanding 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_test/Plugin1"


This is plugin_test/__init__.py::

dir = "plugin_test"


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.normpath(
    os.path.join(os.path.dirname(peerFile), relPath))
    try:
        fObj, path, descr = imp.find_module(name, [path])
    except ImportError:
        return None
    if descr[2] != imp.PKG_DIRECTORY:
        return None
    try:
        return imp.load_module(name, None, '', descr)
    except:
        return None

if __name__ == "__main__":
    pkg = GetPackage("Plugin1", __file__, '.')
    print pkg
    print "Directory ", pkg.dir



More information about the Python-list mailing list