Accessing global namespace from module
Reuben D. Budiardja
techlist at pathfinder.phys.utk.edu
Tue Jun 12 03:19:15 CEST 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.
Reuben D. Budiardja
More information about the Python-list