Accessing global namespace from module

Reuben D. Budiardja techlist at pathfinder.phys.utk.edu
Mon Jun 11 21:19:15 EDT 2007


On Monday 11 June 2007 17:10:03 Gabriel Genellina wrote:
> En Mon, 11 Jun 2007 17:29:35 -0300, reubendb <reubendb at gmail.com> escribió:
> > On Jun 11, 3:30 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
> >
> > wrote:
> >> En Mon, 11 Jun 2007 15:18:58 -0300, reubendb <reube... at gmail.com>
> >>
> >> escribió:
> >> > The problem is I don't define the functions AddPlot() and DrawPlots().
> >> > It's built into the python interpreter of the CLI version of the
> >> > program I mentioned, and they are defined on the main script. I load
> >> > the main script using something like "software -cli -s
> >> > mainscript.py".
> >> > In the mainscript.py I import myModule, but of course myModule does
> >> > not have access to the functions defined in the global namespace of
> >> > mainscript.py.
> >>
> >> Don't you have some import statements at the top of mainscript.py that
> >> are
> >> responsible for bringing AddPlot and DrawPlots into the current
> >> namespace?
> >> Import the same things in your second module.
> >
> > No, I *don't* have any import statement mainscript.py. When using this
> > software's CLI, AddPlot and DrawPlots are available to me
> > automagically from mainscript.py. Hence my question: How do I make
> > this available from other module. Is there any way at all ?
>
> Yes: create your own module on-the-fly, using the recipe posted earlier by
> John Krukoff.
> If there are many functions, try enumerating them all:
>
> import sys
>  from types import ModuleType as module
>
> plotModule = module('plot')
> for key,value in globals().items():
>      if key[:2] != '__':
>          setattr(plotModule, key, value)
>
> sys.modules['plot'] = plotModule

Great ! That seems to work, thanks a lot. 
One last question. Do I have to do this for ever script I write, or can I put 
this into separate file and "include" it somehow ? 
I am going to have several mainscripts.py, and all is going to import myModule 
that will need access to this plots subroutine. It'll be great if I can put 
this trick on a single file that is included by the main scripts, to avoid 
violating DRY principle. 

Thanks for all the help.
RDB
-- 
Reuben D. Budiardja



More information about the Python-list mailing list