[Python-Dev] is the 'path' argument to an importer's find_module() just a hint?

Brett Cannon brett at python.org
Mon Oct 27 20:24:04 CET 2008


On Mon, Oct 27, 2008 at 3:50 AM, Nick Coghlan <ncoghlan at gmail.com> wrote:
> Brett Cannon wrote:
>> I just discovered frozen packages set their __path__ simply to their
>> name and not to a list as expected (http://bugs.python.org/issue4211).
>> This made me think about the 'path' argument to find_module() and
>> whether it can be treated as simply a hint or should always be
>> seriously looked at.
>>
>> Take frozen modules, for instance. If the 'path' argument is meant to
>> always be considered then if a frozen module is within a package a
>> check should be done to make sure that the parent package is in 'path'
>> somewhere. But if it is simply a hint, then 'path' should be ignored
>> and whether the module can be found should depend fully on
>> imp.is_frozen().
>>
>> So, what do people think? Should 'path' for find_module() always be
>> taken into consideration, or only when it happens to be convenient?
>
> From PEP 302:
>
> importer.find_module(fullname, path=None)
>
>    This method will be called with the fully qualified name of the
>    module.  If the importer is installed on sys.meta_path, it will
>    receive a second argument, which is None for a top-level module, or
>    package.__path__ for submodules or subpackages[7].  It should return
>    a loader object if the module was found, or None if it wasn't.  If
>    find_module() raises an exception, it will be propagated to the
>    caller, aborting the import.
>
>
> [7] The path argument to importer.find_module() is there because the
>    pkg.__path__ variable may be needed at this point.  It may either
>    come from the actual parent module or be supplied by
>    imp.find_module() or the proposed imp.get_loader() function.
>
>
> Note the first "may" in the footnote. If an importer doesn't need
> pkg.__path__ to find submodules then it isn't obliged to use it, but the
> import machinery provides it as a convenience.
>

Good enough for me. Then I am just going to ignore the 'path' argument
for frozen modules but use it to short-circuit imports for built-in
modules.

-Brett


More information about the Python-Dev mailing list