[Python-Dev] PEP 376 and PEP 302 - allowing import hooks to provide distribution metadata

Brett Cannon brett at python.org
Sat Jul 4 21:54:58 CEST 2009


On Fri, Jul 3, 2009 at 17:47, Nick Coghlan <ncoghlan at gmail.com> wrote:

> Tarek Ziadé wrote:
> > 2009/7/3 Paul Moore <p.f.moore at gmail.com>:
> >> Does this sound sensible? Tarek, would you be OK with me attempting to
> >> modify your prototype to support this protocol? Are there any tests
> >> for PEP 376, so that I can confirm I haven't completely broken
> >> something? If I can, I'll knock up some simple prototype importers for
> >> non-standard examples, and see how they work with all this.
> >
> > Yes that's exactly what I was thinking about after the discussion we
> > had in the other
> > thread. This change would allow much more flexibility.
>
> It's also very similar to the ideas that started to tick over in the
> back of my head after the previous discussion (only far more fleshed out
> that anything I got to - fortunately I read Paul's message before
> spending too much time on it!)
>
> Specifically regarding this comment from Paul:
>
> > Finder.uninstall(distribution_name, filter=callable, installer=name)
> > Uninstall the given distribution. It's likely that many finders will
> > be read-only. In that case, this function should return None.
> > Otherwise, return a list of the "files" removed. (This may need some
> > clarification, as many finders won't have a concept of a "file name").
>
> PEP 302 finders and loaders actually *are* expected to have a concept of
> a "file name". For Python modules they they are expected to have it so
> they can populate __file__ correctly


Not only that, lots of code out there expects values from __path__ to
contain os.path.sep on top of __file__, so the idea of file paths is already
hard-coded into how import works, whether we like it or not.


> (runpy is also a lot happier with
> them when they expose get_filename(), a relatively recent addition to
> the PEP 302 API).


An addition I was not even aware of. Looks like importlib needs a little
updating.


> For other resources they're expected to have it so the
> get_data() API can work correctly.
>
> One other thing to consider: it may be desirable to have hooks for
> meta_path and path_hooks in distutils that are checked *before* the full
> import hooks in the sys module. The reason I say this is that it would
> allow someone to override just the metadata retrieval (e.g. to pick up
> the extra dependency information saved by setuptools and friends)
> without having to worry about breaking the actual imports from those
> locations.


So as the guy who plans to try to clean up import, I just want to say that
implicit finders will eventually go away. Do not start off making them
implicit, but you can have them installed on sys.meta_path or sys.path_hooks
by default.


>
>
> Cheers,
> Nick.
>
> P.S. +lots on using 'metadata' in the PEP 376 method names rather than
> the jargon 'egginfo'. Jargon isn't always bad, but using it seems fairly
> gratuitous in this case.


Ditto from here. Plus I have an aversion to terminology that goes down the
reptile route instead of the Monty Python route.

-Brett
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20090704/8a1d1edc/attachment-0001.htm>


More information about the Python-Dev mailing list