user modules

Juho Schultz juho.schultz at pp.inet.fi
Thu Oct 5 15:19:20 EDT 2006


Cameron Walsh kirjoitti:

> 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.
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()




More information about the Python-list mailing list