A very Simple and Stupid plugin system in python

Two convenience functions for listing and importing python modules :

# utils.py

import os

def plugins_list(plugins_dirs):
    """ List all python modules in specified plugins folders """
    for path in plugins_dirs.split(os.pathsep):
        for filename in os.listdir(path):
            name, ext = os.path.splitext(filename)
            if ext.endswith(".py"):
                yield name


def import_plugins(plugins_dirs, env):
    """ Import modules into specified environment (symbol table) """
    for p in plugins_list(plugins_dirs):
        m = __import__(p, env)
        env[p] = m

And now use import_plugins() wherever you need to use them !

# yourapp.py

import os
from utils import import_plugins

plugins_dirs = "plugins/:module/plugins/"
sys.path.extend(plugins_dirs.split(os.pathsep))

import_plugins(plugins_dirs, globals())

Note that in order to list all sub-classes of a specific one, you can use this recursive function.

That's all folks !

It is very simple and very stupid, but useful :) You might now want to have a look at serious stuff like Yapsy or PkgResouces.

#python - Posted in the Dev category