Hi, I did this a few times and put the code that loads the plugins in the __init__.py of the plugin directory. You then do not have to do the path stuff.
You can also make a rule that the class defined in each plugin module should be a certain name, for example the same name as the module (but starting with a capital to follow pep8). Cheers, Almar 2009/4/23 Steven D'Aprano <ste...@remove.this.cybersource.com.au> > On Thu, 23 Apr 2009 09:47:56 +0200, Johannes Bauer wrote: > > > Hello group, > > > > I'm developing a GUI application in Python and having a blast so far :-) > > > > What I'd like to add: I want the GUI users to supply plugin scripts, > > i.e. offer some kind of API. That is, I want the user to write short > > Python pieces which look something like > > > > import guiapp > > > > class myplugin(): > > def __init__(self): > > guiapp.add_menu("foobar") > > > > def exec(self, param): > > print("foo") > > "exec" is a reserved word: > > >>> def exec(self, param): > File "<stdin>", line 1 > def exec(self, param): > ^ > SyntaxError: invalid syntax > > > > the GUI application should now browse the plugin directory and read > > those plugin python files and somehow incorporate (i.e. discover what > > modules are there, instanciate, etc.) > > > > How do I do that at runtime with Python? > > Untested: > > import os > import sys > plugin_dir = os.path.expanduser('~/some/path/') > plugins = set() > for name in os.listdir(plugin_dir): > base, ext = os.path.splitext(name) > if ext in ('.py', '.pyc', '.pyo'): > plugins.add(base) > save_path = sys.path > plugin_modules = [] > try: > sys.path = [plugin_dir] > for name in plugins: > plugin_modules.append(__import__(name)) > finally: > sys.path = save_path > > > > > Hope this is useful. > > > -- > Steven > -- > http://mail.python.org/mailman/listinfo/python-list >
-- http://mail.python.org/mailman/listinfo/python-list