Automatically loading and initialising objects from a plugins directory

Dave Challis dsc at ecs.soton.ac.uk
Tue Jul 22 13:09:08 CEST 2008


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I'm trying to write some code which:
1. Finds all modules in a plugin directory
2. Imports those modules
3. Creates an instance of each object defined in the module (each module
will contain exactly 1 object, which is a subclass of 'Plugin')

The closest I've come so far is with something like:

In plugin.py:
# taken from http://docs.python.org/lib/built-in-funcs.html
def my_import(name):
    mod = __import__(name)
    components = name.split('.')
    for comp in components[1:]:
        mod = getattr(mod, comp)
    return mod

def import_plugins():
    mods = []
    for filename in os.listdir('/plugins'):
        if filename.endswith('.py'):
            name = os.path.splitext(filename)[0]
            mods.append(my_import('plugins.' + name))
    return mods

class Plugin(object):
    pass


In plugins/exampleplugin.py:
class ExamplePlugin(Plugin):
    def __init__(self):
        pass


Calling import_plugins() then gives me a list containing references to
modules.

How can I loop through that list and create an instance of whatever
object was defined within the module? (In this case I'd want to
construct an instance of ExamplePlugin)

Thanks in advance,
Dave


- --
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                                              (
      Dave Challis                            ) ><>
____dsc at ecs.soton.ac.uk_______________________(___________________________
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFIhb/Uv26GZvAVVFERAsGaAJ9KwtFI9yXdk2gBGxy0/bjCd5318wCgsiV9
m14BZSvxqZ1EP0OvaXBZoaw=
=TYlD
-----END PGP SIGNATURE-----



More information about the Python-list mailing list