Juho Schultz wrote: > Juho Schultz wrote: >> 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. >>> >> One simple solution would be a shell script that adds user_extensions >> (or whatever) to $PYTHONPATH and then starts your main program. > > Sorry... I was typing faster than reading or thinking. > > You could have a __init__.py file within user_extensions with > __all__ = ["package1", "package2"] > > If you want every python file within some directory in here, you can > auto-generate the __init__.py file in user_extension before importing. > (Or you could have some sort of tester for new .py files detected and > only after you are sure it works, add it.) > > from user_extensions import * > > would import everything mentioned in __all__. You also have access to > their names through > user_extensions.__all__ > > The last step would be to put the modules into a list. After the > import, > > user_ext_list = [eval(elem) for elem in user_extensions.__all__ ] > for ext in user_ext_list: > ext.initialize() > ext.get_tab_window() >
Thanks Juho, Your solution also worked a charm. I like the suggestion of a tester before adding a module to the __all__ list. Thanks for teaching me about the eval() function, I've been wondering how to turn a string into a python command. -- http://mail.python.org/mailman/listinfo/python-list