import from a string

iu2 israelu at elbit.co.il
Wed Nov 4 00:45:23 EST 2009


On Nov 4, 3:10 am, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
> En Tue, 03 Nov 2009 17:36:08 -0300, iu2 <isra... at elbit.co.il> escribió:
>
>
>
>
>
> > On Nov 3, 7:49 pm, Matt McCredie <mccre... at gmail.com> wrote:
> >> iu2 <israelu <at> elbit.co.il> writes:
>
> >> > Having a file called funcs.py, I would like to read it into a string,
> >> > and then import from that string.
> >> > That is instead of importing from the fie system, I wonder if it's
> >> > possible to eval the text in the string and treat it as a module.
> >> mymodule = types.ModuleType("mymodule", "Optional Doc-String")
> >> with file('funcs.py') as f:
> >>     txt = f.read()
> >> exec txt in globals(), mymodule.__dict__
> >> sys.modules['mymodule'] = mymodule
>
> > Thanks, it seems simpler than I thought.
> > I don't fully understand , though, the exec statement, how it causes
> > the string execute in the context of mymodule.
>
> Sometimes you don't even require a module, and this is simpler to  
> understand. Suppose you have a string like this:
>
> txt = """
> def foo(x):
>    print 'x=', x
>
> def bar(x):
>    return x + x
> """
>
> you may execute it:
>
> py> namespace = {}
> py> exec txt in namespace
>
> The resulting namespace contains the foo and bar functions, and you may  
> call them:
>
> py> namespace.keys()
> ['__builtins__', 'foo', 'bar']
> py> namespace['foo']('hello')
> x= hello
>
> exec just executes the string using the given globals dictionary as its  
> global namespace. Whatever is present in the dictionary is visible in the  
> executed code as global variables (none in this example). The global names  
> that the code creates become entries in the dictionary. (foo and bar;  
> __builtins__ is an implementation detail of CPython). You may supply  
> separate globals and locals dictionaries.
>
> --
> Gabriel Genellina- Hide quoted text -
>
> - Show quoted text -

Thanks for the explanation.
What happens if both global and local dictionaries are supplied: where
are the newly created entities created? In the local dict?





More information about the Python-list mailing list