user modules

Tuomas tuomas.vesterinen at pp.inet.fi
Thu Oct 5 18:21:00 CEST 2006


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




More information about the Python-list mailing list