Cameron Walsh wrote: > Hi, > > I'm writing a python program to analyse and export volumetric data. To > make development and extension easier, and to make it more useful to the > public when it is released (LGPL), I would like to enable users to place > their own python files in a "user_extensions" directory. These files > would implement a common interface in order for the main program to be > able to read them and execute the necessary code. > > My question is what is the best way of implementing this? > > I have investigated importing them as modules, but unless the user > modifies the main program I cannot see how the main program can learn of > the existence of specific modules. > > For example: > > from user_modules import * > # directory 'user_modules' contains __init__.py allowing this > # From here I would need a list of the imported modules, in order to > # execute a common command on each of them, such as > > for module in imported_modules: > module.initialise() > module.get_tab_window() > > > How do I get from the first bit to the second bit, or is there a better > way of obtaining the functionality I need? > > > --Cameron.
import os files=os.listdir('user_modules') tabs=[] for fle in files: if fle.endswith('.py'): module=__import__(fle[0:-3], 'user_modules', None, ['initialise', 'get_tab_window']) module.initialise() tabs.append(module.get_tab_window()) *not tested* print __import__.__doc__ __import__(name, globals, locals, fromlist) -> module Import a module. The globals are only used to determine the context; they are not modified. The locals are currently unused. The fromlist should be a list of names to emulate ``from name import ...'', or an empty list to emulate ``import name''. When importing a module from a package, note that __import__('A.B', ...) returns package A when fromlist is empty, but its submodule B when fromlist is not empty. Tuomas -- http://mail.python.org/mailman/listinfo/python-list