Importing a file into another module's namespace

MRAB google at mrabarnett.plus.com
Mon Apr 27 22:23:03 EDT 2009


Gary Oberbrunner wrote:
> Hi; my first time posting here.  I have a somewhat tricky problem I'd
> like some help with.
> 
> I have a module, foo.bar, that defines a number of functions and
> variables as usual.  Now after importing foo.bar, I'd like to load
> another file of code (say xyz.py), but *into* foo.bar's namespace.  So
> if xyz.py contains:
> 
> def XYZ(arg):
>   print "Aargh! ", arg
> ABC="abc"
> 
> then I'd like to be able to do this in my main python file:
> 
> import foo.bar
> m=sys.modules["foo.bar"] # or something like that
> load_module_into_namespace("xyz.py", m)
> foo.bar.XYZ("whatever")
> print foo.bar.ABC
> 
> As you can see it's the middle two lines that have me stumped.  Anyone
> have any ideas?  Oh yes, this needs to work in python 2.2 or so (earlier
> is even better).
> 
> Here's a tantalizing snippet from the Python "import" doc:
> "...If a file is found, it is parsed, yielding an executable code block.
> If a syntax error occurs, SyntaxError is raised. Otherwise, an empty
> module of the given name is created and inserted in the module table,
> and then the code block is executed in the context of this module."
> 
> That's kind of what I want to do, except get an existing module and then
> execute my xyz.py file's code block in the context of that module, I
> think.  Any help would be much appreciated!
> 
How about:

import foo.bar
import xyz
for x in dir(xyz):
     if not x.startswith("__"):
         setattr(foo.bar, x, getattr(xyz, x))
print foo.bar.ABC



More information about the Python-list mailing list