diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py index 8ed6b8f7951..5d23b290d1f 100644 --- a/Lib/test/test_import.py +++ b/Lib/test/test_import.py @@ -417,6 +417,19 @@ def check_relative(): self.assertRaises(ValueError, check_absolute) self.assertRaises(ValueError, check_relative) + def test_absolute_import_without_future(self): + # If absolute import syntax is used, then do not try to perform + # a relative import in the face of failure. + # Issue #7902. + try: + from .os import sep + except ImportError: + pass + else: + self.fail("explicit relative import triggered an " + "implicit relative import") + + def test_main(verbose=None): run_unittest(ImportTest, TestPycRewriting, PathsTests, RelativeImport) diff --git a/Misc/NEWS b/Misc/NEWS index ee4bf2b7875..6a9c0f3a589 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.6.6 alpha 1? Core and Builtins ----------------- +- Issue #7902: When using explicit relative import syntax, don't try + implicit relative import semantics. + - Issue #7079: Fix a possible crash when closing a file object while using it from another thread. Patch by Daniel Stutzbach. diff --git a/Python/import.c b/Python/import.c index da660cff7a9..07f572000fe 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2130,7 +2130,8 @@ import_module_level(char *name, PyObject *globals, PyObject *locals, if (parent == NULL) return NULL; - head = load_next(parent, Py_None, &name, buf, &buflen); + head = load_next(parent, level < 0 ? Py_None : parent, &name, buf, + &buflen); if (head == NULL) return NULL;