Re: PEP 420: Implicit Namespace Packages
Brett Cannon <[email protected]>
| Newsgroups | gmane.comp.python.import |
|---|---|
| Message-ID | <CAP1=2W4rOR9_FuyHT6=9VscsOn5Lx6w4Tpyq_nRNseGvh0o1yg@mail.gmail.com> |
On Thu, Apr 19, 2012 at 16:18, Eric V. Smith <[email protected]> wrote: > This reflects (I hope!) the discussions at PyCon. My plan is to produce > an implementation based on the importlib code, and then flush out pieces > of the PEP. > > In particular, I want to make sure the PEP addresses the various > objections that were raised, especially by Nick. > Obviously thanks for writing this up, Eric! I have the following comments (some of which I would fix myself but I lack hg repo access ATM) ... In Terminology, can you put the terms when you define them in quotes, e.g. 'The term "distribution" refers to ...'? "setuptools provides a similar function pkg_resources.declare_namespace" should either have a "named" added in there or a comma. "As vendors might chose(sic) to". You should mention that this will do away with the ImportWarning of discovering a directory lacking an __init__.py file. As for the effects on path hooks, there are none. =) It's actually the finders that they return which need to change. Either finders need to be updated to return something other than None to signal they have a directory which works for the name (maybe the string for what should go into __path__?) or another method on finders which is called if finder.find_module() returns None (like finder.find_namespace() which returns the directory name or None). Then you need to update importlib._bootstrap.PathFinder to handle one of the two approaches to create the module and set it with some __loader__ (which really doesn't need to do much more than construct a module with the proper attributes since there is nothing to execute) like importlib.machinery.NamespaceLoader(name, *paths). Using a specific class in import already has precedence thanks to NullImporter. If you want performance then you go with the returning of a string by finder.find_module() since the finder can keep track of finding a directory w/o an __init__.py when it tries looking for a module. Import can do a hasattr check on non-None return values to decide if it got back a loader or a path for a namespace. If you don't like what the return value to mean based on it being None or having a specific attribute then you would want the new method at the (potential) cost of another stat call. Or maybe someone can think of some other approach. _______________________________________________ Import-SIG mailing list [email protected] http://mail.python.org/mailman/listinfo/import-sig