Issue #14605: Make explicit the entries on sys.path_hooks that used to

be implicit.

Added a warning for when sys.path_hooks is found to be empty. Also
changed the meaning of None in sys.path_importer_cache to represent
trying sys.path_hooks again (an interpretation of previous semantics).
Also added a warning for when None was found.

The long-term goal is for None in sys.path_importer_cache to represent
the same as imp.NullImporter: no finder found for that sys.path entry.
This commit is contained in:
Brett Cannon 2012-04-25 20:54:04 -04:00
parent 8f79dd5d7c
commit e0d88a173c
9 changed files with 3075 additions and 3206 deletions

View file

@ -9,6 +9,7 @@ importers when locating support scripts as well as when importing modules.
# Written by Nick Coghlan <ncoghlan at gmail.com>
# to implement PEP 338 (Executing Modules as Scripts)
import os
import sys
import imp
from pkgutil import read_code
@ -94,7 +95,7 @@ def _get_filename(loader, mod_name):
for attr in ("get_filename", "_get_filename"):
meth = getattr(loader, attr, None)
if meth is not None:
return meth(mod_name)
return os.path.abspath(meth(mod_name))
return None
# Helper to get the loader, code and filename for a module
@ -198,10 +199,6 @@ def _get_importer(path_name):
try:
importer = cache[path_name]
except KeyError:
# Not yet cached. Flag as using the
# standard machinery until we finish
# checking the hooks
cache[path_name] = None
for hook in sys.path_hooks:
try:
importer = hook(path_name)
@ -213,10 +210,7 @@ def _get_importer(path_name):
# NullImporter throws ImportError if the supplied path is a
# *valid* directory entry (and hence able to be handled
# by the standard import machinery)
try:
importer = imp.NullImporter(path_name)
except ImportError:
return None
importer = imp.NullImporter(path_name)
cache[path_name] = importer
return importer