[Import-SIG] New PEP draft: "Simplified Package Layout and Partitioning"

P.J. Eby pje at telecommunity.com
Tue Aug 16 23:31:09 CEST 2011

At 09:13 PM 8/16/2011 +0200, Greg Slodkowicz wrote:
> > I do have a rough
> > (i.e. utterly untested and probably bug-ridden) draft rewrite of
> > _gcd_import() and associated functions, if you'd like to take a look at it:
> >
> > Â  Â http://pastebin.com/6e29v8LR
>I haven't run the code but I don't currently see why this approach
>shouldn't work. I've been thinking about reimplementing _gcd_import()
>like this but wasn't sure it wouldn't interfere with the way importlib
>is designed.

It shouldn't.  Since importlib is supposed to be as 
backward-compatible as possible with the C implementation, and the C 
implementation was iterative, it should be even *more* correct to 
implement it with iteration.  ;-)

>I followed the approach in 'standard' import, i. e. to leave the
>parent modules be even if importing the child fails but I guess it
>doesn't make much sense to have essentially empty packages hanging
>around. But then again, if some of the parents are virtual and some
>'actual,' should we clear the former and leave the latter or just get
>rid of everything? I'm hoping there is not much legacy code that
>relies on parent modules being imported in this way ;)

If you look closely at the proposed code, I simply avoid creating the 
parents until the last possible moment.  I don't think there's any 
need to *remove* the parents if the load fails; the idea is just that 
a virtual package's module doesn't exist until a submodule is *found* 
(whether or not it's successfully *loaded*).

I think this is a reasonable compromise, as it ensures that the 
module itself will see the parents, and that if somehow something 
keeps a reference it won't end up stale/invalid.

Anyway, I wrote the PEP with essentially this exact implementation 
approach in mind, though it might not be 100% clear from the PEP itself.

More information about the Import-SIG mailing list