Building a minimal plugin architecture in Python Building a minimal plugin architecture in Python python python

Building a minimal plugin architecture in Python


Mine is, basically, a directory called "plugins" which the main app can poll and then use imp.load_module to pick up files, look for a well-known entry point possibly with module-level config params, and go from there. I use file-monitoring stuff for a certain amount of dynamism in which plugins are active, but that's a nice-to-have.

Of course, any requirement that comes along saying "I don't need [big, complicated thing] X; I just want something lightweight" runs the risk of re-implementing X one discovered requirement at a time. But that's not to say you can't have some fun doing it anyway :)


module_example.py:

def plugin_main(*args, **kwargs):    print args, kwargs

loader.py:

def load_plugin(name):    mod = __import__("module_%s" % name)    return moddef call_plugin(name, *args, **kwargs):    plugin = load_plugin(name)    plugin.plugin_main(*args, **kwargs)call_plugin("example", 1234)

It's certainly "minimal", it has absolutely no error checking, probably countless security problems, it's not very flexible - but it should show you how simple a plugin system in Python can be..

You probably want to look into the imp module too, although you can do a lot with just __import__, os.listdir and some string manipulation.


Have a look at at this overview over existing plugin frameworks / libraries, it is a good starting point. I quite like yapsy, but it depends on your use-case.