diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -745,15 +745,15 @@ """Meta path finder for sys.(path|path_hooks|path_importer_cache).""" @classmethod - def _path_hooks(cls, path, hooks=None): + def _path_hooks(cls, path): """Search sequence of hooks for a finder for 'path'. If 'hooks' is false then use sys.path_hooks. """ - if hooks is None: - hooks = sys.path_hooks - for hook in hooks: + if not sys.path_hooks: + _warnings.warn('sys.path_hooks is empty', ImportWarning) + for hook in sys.path_hooks: try: return hook(path) except ImportError: @@ -763,14 +763,11 @@ path=path) @classmethod - def _path_importer_cache(cls, path, default=None): + def _path_importer_cache(cls, path): """Get the finder for the path from sys.path_importer_cache. If the path is not in the cache, find the appropriate finder and cache - it. If None is cached, get the default finder and cache that - (if applicable). - - Because of NullImporter, some finder should be returned. The only + it. Because of NullImporter, some finder should be returned. The only explicit fail case is if None is cached but the path cannot be used for the default hook, for which ImportError is raised. @@ -783,9 +780,11 @@ finder = cls._path_hooks(path) sys.path_importer_cache[path] = finder else: - if finder is None and default: - # Raises ImportError on failure. - finder = default(path) + if finder is None: + msg = "'None' in sys.path_importer_cache[{!r}]".format(path) + _warnings.warn(msg, ImportWarning) + del sys.path_importer_cache[path] + finder = cls._path_hooks(path) sys.path_importer_cache[path] = finder return finder @@ -924,29 +923,6 @@ # Import itself ############################################################### -_DEFAULT_PATH_HOOK = None # Set in _setup() - -class _DefaultPathFinder(PathFinder): - - """Subclass of PathFinder that implements implicit semantics for - __import__.""" - - @classmethod - def _path_hooks(cls, path): - """Search sys.path_hooks as well as implicit path hooks.""" - try: - return super()._path_hooks(path) - except ImportError: - implicit_hooks = [_DEFAULT_PATH_HOOK, _imp.NullImporter] - return super()._path_hooks(path, implicit_hooks) - - @classmethod - def _path_importer_cache(cls, path): - """Use the default path hook when None is stored in - sys.path_importer_cache.""" - return super()._path_importer_cache(path, _DEFAULT_PATH_HOOK) - - class _ImportLockContext: """Context manager for the import lock.""" @@ -1001,7 +977,7 @@ raise ValueError("Empty module name") -_IMPLICIT_META_PATH = [BuiltinImporter, FrozenImporter, _DefaultPathFinder] +_IMPLICIT_META_PATH = [BuiltinImporter, FrozenImporter, PathFinder] _ERR_MSG = 'No module named {!r}' @@ -1196,12 +1172,6 @@ if builtin_os == 'nt': SOURCE_SUFFIXES.append('.pyw') - supported_loaders = [(ExtensionFileLoader, _suffix_list(3), False), - (SourceFileLoader, _suffix_list(1), True), - (_SourcelessFileLoader, _suffix_list(2), True)] - setattr(self_module, '_DEFAULT_PATH_HOOK', - FileFinder.path_hook(*supported_loaders)) - def _install(sys_module, _imp_module): """Install importlib as the implementation of import. @@ -1211,6 +1181,8 @@ """ _setup(sys_module, _imp_module) - orig_import = builtins.__import__ - builtins.__import__ = __import__ - builtins.__original_import__ = orig_import + supported_loaders = [(ExtensionFileLoader, _suffix_list(3), False), + (SourceFileLoader, _suffix_list(1), True), + (_SourcelessFileLoader, _suffix_list(2), True)] + sys.path_hooks.extend([FileFinder.path_hook(*supported_loaders), + _imp.NullImporter]) diff --git a/Lib/importlib/test/import_/test_fromlist.py b/Lib/importlib/test/import_/test_fromlist.py --- a/Lib/importlib/test/import_/test_fromlist.py +++ b/Lib/importlib/test/import_/test_fromlist.py @@ -1,6 +1,7 @@ """Test that the semantics relating to the 'fromlist' argument are correct.""" from .. import util from . import util as import_util +import imp import unittest class ReturnValue(unittest.TestCase): @@ -73,7 +74,8 @@ def test_no_module_from_package(self): # [no module] with util.mock_modules('pkg.__init__') as importer: - with util.import_state(meta_path=[importer]): + with util.import_state(meta_path=[importer], + path_hooks=[imp.NullImporter]): module = import_util.import_('pkg', fromlist='non_existent') self.assertEqual(module.__name__, 'pkg') self.assertTrue(not hasattr(module, 'non_existent')) diff --git a/Lib/importlib/test/import_/test_path.py b/Lib/importlib/test/import_/test_path.py --- a/Lib/importlib/test/import_/test_path.py +++ b/Lib/importlib/test/import_/test_path.py @@ -9,6 +9,7 @@ from test import support from types import MethodType import unittest +import warnings class FinderTests(unittest.TestCase): @@ -78,9 +79,16 @@ module = '' importer = util.mock_modules(module) with util.import_state(path=['1', '2'], - path_importer_cache={'1': None, '2': importer}): - loader = machinery.PathFinder.find_module(module) - self.assertTrue(loader is importer) + path_importer_cache={'1': None, '2': importer}, + path_hooks=[imp.NullImporter]): + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter('always') + loader = machinery.PathFinder.find_module(module) + self.assertTrue(loader is importer) + self.assertEqual(len(w), 1) + warned = w[0] + self.assertTrue(issubclass(warned.category, ImportWarning)) + self.assertIn(repr(None), str(warned.message)) def test_path_importer_cache_empty_string(self): # The empty string should create a finder using the cwd. @@ -94,57 +102,9 @@ self.assertIn(os.curdir, sys.path_importer_cache) -class DefaultPathFinderTests(unittest.TestCase): - - """Test _bootstrap._DefaultPathFinder.""" - - def test_implicit_hooks(self): - # Test that the implicit path hooks are used. - bad_path = '' - module = '' - assert not os.path.exists(bad_path) - existing_path = tempfile.mkdtemp() - try: - with util.import_state(): - nothing = _bootstrap._DefaultPathFinder.find_module(module, - path=[existing_path]) - self.assertTrue(nothing is None) - self.assertTrue(existing_path in sys.path_importer_cache) - result = isinstance(sys.path_importer_cache[existing_path], - imp.NullImporter) - self.assertFalse(result) - nothing = _bootstrap._DefaultPathFinder.find_module(module, - path=[bad_path]) - self.assertTrue(nothing is None) - self.assertTrue(bad_path in sys.path_importer_cache) - self.assertTrue(isinstance(sys.path_importer_cache[bad_path], - imp.NullImporter)) - finally: - os.rmdir(existing_path) - - - def test_path_importer_cache_has_None(self): - # Test that the default hook is used when sys.path_importer_cache - # contains None for a path. - module = '' - importer = util.mock_modules(module) - path = '' - # XXX Not blackbox. - original_hook = _bootstrap._DEFAULT_PATH_HOOK - mock_hook = import_util.mock_path_hook(path, importer=importer) - _bootstrap._DEFAULT_PATH_HOOK = mock_hook - try: - with util.import_state(path_importer_cache={path: None}): - loader = _bootstrap._DefaultPathFinder.find_module(module, - path=[path]) - self.assertTrue(loader is importer) - finally: - _bootstrap._DEFAULT_PATH_HOOK = original_hook - - def test_main(): from test.support import run_unittest - run_unittest(FinderTests, DefaultPathFinderTests) + run_unittest(FinderTests) if __name__ == '__main__': test_main() diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py --- a/Lib/pkgutil.py +++ b/Lib/pkgutil.py @@ -379,18 +379,15 @@ for path_hook in sys.path_hooks: try: importer = path_hook(path_item) + sys.path_importer_cache.setdefault(path_item, importer) break except ImportError: pass else: - importer = None - sys.path_importer_cache.setdefault(path_item, importer) - - if importer is None: - try: - importer = ImpImporter(path_item) - except ImportError: - importer = None + try: + importer = ImpImporter(path_item) + except ImportError: + importer = None return importer diff --git a/Lib/runpy.py b/Lib/runpy.py --- a/Lib/runpy.py +++ b/Lib/runpy.py @@ -198,10 +198,6 @@ 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 +209,7 @@ # 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 diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -46,6 +46,8 @@ # Check the working directory import os print('cwd==%a' % os.getcwd()) +print('abs __file__==%a' % os.path.abspath(__file__)) +print('abs sys.argv[0]==%a' % os.path.abspath(sys.argv[0])) """ def _make_test_script(script_dir, script_basename, source=test_source): @@ -87,17 +89,21 @@ printed_argv0 = 'sys.argv[0]==%a' % expected_argv0 printed_path0 = 'sys.path[0]==%a' % expected_path0 printed_cwd = 'cwd==%a' % os.getcwd() + printed_abs_file = 'abs __file__==%a' % os.path.abspath(expected_file) + printed_abs_argv0 = ('abs sys.argv[0]==%a' % + os.path.abspath(expected_argv0)) if verbose > 1: print('Expected output:') print(printed_file) print(printed_package) print(printed_argv0) print(printed_cwd) - self.assertIn(printed_file.encode('utf-8'), data) self.assertIn(printed_package.encode('utf-8'), data) self.assertIn(printed_argv0.encode('utf-8'), data) self.assertIn(printed_path0.encode('utf-8'), data) self.assertIn(printed_cwd.encode('utf-8'), data) + self.assertIn(printed_abs_file.encode('utf-8'), data) + self.assertIn(printed_abs_argv0.encode('utf-8'), data) def _check_script(self, script_name, expected_file, expected_argv0, expected_path0, diff --git a/Lib/test/test_importhooks.py b/Lib/test/test_importhooks.py --- a/Lib/test/test_importhooks.py +++ b/Lib/test/test_importhooks.py @@ -215,7 +215,7 @@ self.doTestImports(i) def testPathHook(self): - sys.path_hooks.append(PathImporter) + sys.path_hooks.insert(0, PathImporter) sys.path.append(test_path) self.doTestImports() @@ -228,7 +228,7 @@ def testImpWrapper(self): i = ImpWrapper() sys.meta_path.append(i) - sys.path_hooks.append(ImpWrapper) + sys.path_hooks.insert(0, ImpWrapper) mnames = ( "colorsys", "urllib.parse", "distutils.core", "sys", ) diff --git a/Lib/test/test_threaded_import.py b/Lib/test/test_threaded_import.py --- a/Lib/test/test_threaded_import.py +++ b/Lib/test/test_threaded_import.py @@ -145,7 +145,7 @@ def path_hook(path): finder.find_module('') raise ImportError - sys.path_hooks.append(path_hook) + sys.path_hooks.insert(0, path_hook) sys.meta_path.append(flushing_finder) try: # Flush the cache a first time diff --git a/Python/import.c b/Python/import.c --- a/Python/import.c +++ b/Python/import.c @@ -268,8 +268,8 @@ "# can't import zipimport.zipimporter\n"); } else { - /* sys.path_hooks.append(zipimporter) */ - err = PyList_Append(path_hooks, zipimporter); + /* sys.path_hooks.insert(0, zipimporter) */ + err = PyList_Insert(path_hooks, 0, zipimporter); Py_DECREF(zipimporter); if (err < 0) { goto error; diff --git a/Python/importlib.h b/Python/importlib.h index bc4c0d9638e4f8f252a80b871ad40a9fa85bf97e..e081dc87e85eba5e314df6da9f3ece27e28d4765 GIT binary patch literal 169673 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%0A+rc{q?ihc)5Le)-WhI+xKSaRFS;B-i#rp3-O3 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