Best practices with import?

Peter Hansen peter at engcorp.com
Mon Aug 6 00:01:59 EDT 2001


Tavis Rudd wrote:
> 
> Peter Hansen wrote:

Umm.. no I didn't.  Gordon wrote this...

> > It's also very useful in some circular import situations.
> >
> > Circular imports are fine where both modules use the "import <module>"
> > form of import. They fail when the 2nd module wants to grab a name
> > out of the first ("from module import name") and the import is at
> > the top level. That's because names in the 1st are not yet available,
> > (the first module is busy importing the 2nd).
> >
> > As above, this is a sensible solution only if the use of the imported
> > module is confined to the one function.
> 
> Actually, circular imports can still cause problems using the "import
> <module>" form. Some of the "import  <module>" statements in Cheetah
> (www.cheetahtemplate.org) were causing circular import problems in
> Jython.  cPython was fine, unless the module was being imported using
> imp.load_source() or one of its kin.  

This sounds like Jython is broken.  Shouldn't the import statement 
in the second module, which imports the first module, just bring
a reference into the second module's namespace?  It's probably not
supposed to cause any trouble.

imp.load_source(), I note, is documented as "obsolete".  It also 
points out, however, that it will re-initialize the module if it
is already loaded, which implies it won't work with circular 
references, as you discovered.  Maybe Jython is using load_source() 
or an equivalent, without looking in sys.modules first?

-- 
----------------------
Peter Hansen, P.Eng.
peter at engcorp.com



More information about the Python-list mailing list