(original) (raw)

changeset: 76579:3bd60cc27664 user: Brett Cannon brett@python.org date: Fri Apr 27 14:01:58 2012 -0400 files: Lib/importlib/_bootstrap.py Lib/importlib/test/import_/test_meta_path.py Misc/NEWS Modules/config.c.in PC/config.c PC/os2emx/config.c PC/os2vacpp/config.c Python/importlib.h description: Issue #14605: Stop having implicit entries for sys.meta_path. ImportWarning is raised if sys.meta_path is found to be empty. diff -r c18256de00bb -r 3bd60cc27664 Lib/importlib/_bootstrap.py --- a/Lib/importlib/_bootstrap.py Fri Apr 27 13:52:55 2012 -0400 +++ b/Lib/importlib/_bootstrap.py Fri Apr 27 14:01:58 2012 -0400 @@ -956,8 +956,9 @@ def _find_module(name, path): """Find a module's loader.""" - meta_path = sys.meta_path + _IMPLICIT_META_PATH - for finder in meta_path: + if not sys.meta_path: + _warnings.warn('sys.meta_path is empty', ImportWarning) + for finder in sys.meta_path: loader = finder.find_module(name, path) if loader is not None: # The parent import may have already imported this module. @@ -986,8 +987,6 @@ raise ValueError("Empty module name") -_IMPLICIT_META_PATH = [BuiltinImporter, FrozenImporter, PathFinder] - _ERR_MSG = 'No module named {!r}' def _find_and_load(name, import_): @@ -1195,3 +1194,4 @@ (SourcelessFileLoader, _suffix_list(2), True)] sys.path_hooks.extend([FileFinder.path_hook(*supported_loaders), _imp.NullImporter]) + sys.meta_path.extend([BuiltinImporter, FrozenImporter, PathFinder]) diff -r c18256de00bb -r 3bd60cc27664 Lib/importlib/test/import_/test_meta_path.py --- a/Lib/importlib/test/import_/test_meta_path.py Fri Apr 27 13:52:55 2012 -0400 +++ b/Lib/importlib/test/import_/test_meta_path.py Fri Apr 27 14:01:58 2012 -0400 @@ -1,7 +1,10 @@ from .. import util from . import util as import_util +import importlib._bootstrap +import sys from types import MethodType import unittest +import warnings class CallingOrder(unittest.TestCase): @@ -33,6 +36,21 @@ with util.import_state(meta_path=[first, second]): self.assertEqual(import_util.import_(mod_name), 42) + def test_empty(self): + # Raise an ImportWarning if sys.meta_path is empty. + module_name = 'nothing' + try: + del sys.modules[module_name] + except KeyError: + pass + with util.import_state(meta_path=[]): + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter('always') + self.assertIsNone(importlib._bootstrap._find_module('nothing', + None)) + self.assertEqual(len(w), 1) + self.assertTrue(issubclass(w[-1].category, ImportWarning)) + class CallSignature(unittest.TestCase): diff -r c18256de00bb -r 3bd60cc27664 Misc/NEWS --- a/Misc/NEWS Fri Apr 27 13:52:55 2012 -0400 +++ b/Misc/NEWS Fri Apr 27 14:01:58 2012 -0400 @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #14605: No longer have implicit entries in sys.meta_path. If + sys.meta_path is found to be empty, raise ImportWarning. + - Issue #14605: No longer have implicit entries in sys.path_hooks. If sys.path_hooks is found to be empty, a warning will be raised. If None is found in sys.path_importer_cache, a warning is raised and a search on diff -r c18256de00bb -r 3bd60cc27664 Modules/config.c.in --- a/Modules/config.c.in Fri Apr 27 13:52:55 2012 -0400 +++ b/Modules/config.c.in Fri Apr 27 14:01:58 2012 -0400 @@ -45,7 +45,6 @@ {"_ast", PyInit__ast}, /* These entries are here for sys.builtin_module_names */ - {"__main__", NULL}, {"builtins", NULL}, {"sys", NULL}, diff -r c18256de00bb -r 3bd60cc27664 PC/config.c --- a/PC/config.c Fri Apr 27 13:52:55 2012 -0400 +++ b/PC/config.c Fri Apr 27 14:01:58 2012 -0400 @@ -146,7 +146,6 @@ {"_imp", PyInit_imp}, /* These entries are here for sys.builtin_module_names */ - {"__main__", NULL}, {"builtins", NULL}, {"sys", NULL}, {"_warnings", _PyWarnings_Init}, diff -r c18256de00bb -r 3bd60cc27664 PC/os2emx/config.c --- a/PC/os2emx/config.c Fri Apr 27 13:52:55 2012 -0400 +++ b/PC/os2emx/config.c Fri Apr 27 14:01:58 2012 -0400 @@ -153,7 +153,6 @@ {"_imp", initimp}, /* These entries are here for sys.builtin_module_names */ - {"__main__", NULL}, {"builtins", NULL}, {"sys", NULL}, diff -r c18256de00bb -r 3bd60cc27664 PC/os2vacpp/config.c --- a/PC/os2vacpp/config.c Fri Apr 27 13:52:55 2012 -0400 +++ b/PC/os2vacpp/config.c Fri Apr 27 14:01:58 2012 -0400 @@ -91,7 +91,6 @@ {"_imp", initimp}, /* These entries are here for sys.builtin_module_names */ - {"__main__", NULL}, {"builtins", NULL}, {"sys", NULL}, diff -r c18256de00bb -r 3bd60cc27664 Python/importlib.h Binary file Python/importlib.h has changed /brett@python.org