[Distutils] [setuptools] Bug in setuptools ImpLoader
Jeremy Kloth
jeremy.kloth at 4suite.org
Fri Sep 8 22:04:00 CEST 2006
On Friday 08 September 2006 1:16 pm, Phillip J. Eby wrote:
> At 12:24 PM 9/8/2006 -0600, Jeremy Kloth wrote:
> > >From PEP 302:
> >
> > The load_module() method has a few responsibilities that it must
> > fulfill *before* it runs any code:
> >
> > - If there is an existing module object named 'fullname' in
> > sys.modules, the loader *must* use that existing module.
> > (Otherwise, the reload() builtin will not work correctly.)
> > If a module named 'fullname' does not exist in sys.modules,
> > the loader must create a new module object and add it to
> > sys.modules.
> >(emphasis on must)
> >
> >The current implementation always reloads the module if it exists.
>
> Yes, that's the *intent* of the above paragraph. An importer that
> *doesn't* reload under these circumstances will break the reload() builtin.
I read the paragraph as stating that the loader *returns* the module from
sys.modules instantly or it would break reload(). After re-reading PEP 302
several times, it becomes clear that the intention is that the module's
contents are replaced before returning the module.
> > This
> >problem exists in both the 0.6 and 0.7 series. Since pkgutil is in Python
> >2.5, this is an issue there as well.
>
> Unless I've misunderstood you, this is not a problem, it's the correct and
> intended behavior. When a loader is asked to load a module that's in
> sys.modules, it's supposed to *reload* it. Otherwise, the reload() builtin
> won't work.
It would be worth adding a sentence stating that loader.load_module() is the
same as a reload() if the module is already imported (just like the docs for
imp.load_module).
My confusion, no problem here except for in the code that was expecting my
concept for things to work.
--
Jeremy Kloth
http://4suite.org/
More information about the Distutils-SIG
mailing list