[Python-Dev] Re: Christmas Wishlist

Edward Loper edloper at gradient.cis.upenn.edu
Mon Dec 15 13:44:56 EST 2003


Barry Warsaw <barry at python.org> wrote:
> Actually, if truth be told, I'd love to just ban local imports.  I
> understand that might be controversial though <wink>.

+1 (asuming that you're talking about package-local imports).

I've seen a couple people get bitten by the fact that a module gets 
loaded twice if there are separate local & global imports for it:

     % mkdir pkg

     % touch pkg/__init__.py

     % cat >pkg/a.py
     print 'A is being imported (not re-used)'
     class A: pass

     % cat >pkg/b.py
     from a import A as LocalA
     from pkg.a import A as GlobalA
     print isinstance(LocalA(), GlobalA)
     print isinstance(GlobalA(), LocalA)

     % PYTHONPATH=.; python pkg/b.py
     A is being imported (not re-used)
     A is being imported (not re-used)
     0
     0

Since pkg/a gets loaded twice, we end up with two versions of class A, 
which are not compatible.  In practice this usually comes up if a 
package uses local imports between submodules, and then an outside user 
uses a global import to get a submodule.

-Edward





More information about the Python-Dev mailing list