Nested module import clutters package namespace?

Arnaud Delobelle arnodel at googlemail.com
Thu Feb 28 19:58:44 EST 2008


On Feb 29, 12:16 am, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Thu, 28 Feb 2008 11:00:08 -0200, Dr. Rüdiger Kupper  
> <ruediger.kup... at honda-ri.de> escribió:
>
>
>
> > I'd be grateful for help with a problem of package and module
> > namespaces. The behaviour I observe is unexpected (to me), and I
> > couldn't find the answer in the docs, the tutorial, or the mailing
> > list archive. So here we go:
>
> > I have a package named 'pack'. Apart from the '__init__.py' file the
> > directory contains two modules 'x.py' and 'y.py':
>
> > pack/
> >       __init__.py
> >       x.py
> >       y.py
>
> > ==== __init__.py ====
> > print "pack: Here is pack."
> > print "pack: I now assign y='hello'."
> > y="hello"
> > print "pack: My y is now:", repr(y)
> > print "pack: I now 'import x' which in turn does 'import y as q'."
> > import x
> > print "pack: My y is now:", repr(y)
> > print "pack: Why?"
> > =====================
>
> > ==== x.py ===========
> > print '  x: Here is x.'
> > print "  x: I now 'import y as q'."
> > import y as q
> > =====================
>
> > ==== y.py ===========
> > print '    y: Here is y.'
> > =====================
>
> Looks like a bug to me - or perhaps someone who actually understands how  
> import works could explain it?

Say:

pack/
   __init__.py
   x.py

importing x in any manner will automatically load pack and put x in
pack's namespace.  Try:

from pack import x as foo
sys.modules['pack'].x

This explain the behaviour observed by the OP.  AFAIK it is not a
bug.  The tutoria hints at this without going into too much detail.

--
Arnaud




More information about the Python-list mailing list