diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py index f47c6c9635e..da4fe3ba73a 100644 --- a/Lib/test/test_import.py +++ b/Lib/test/test_import.py @@ -431,6 +431,18 @@ class RelativeImportTests(unittest.TestCase): 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(ImportTests, PycRewritingTests, PathsTests, RelativeImportTests) diff --git a/Misc/NEWS b/Misc/NEWS index b81eb70aa65..1c4e174389b 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.7 Release Candidate 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 7abe6795725..990ee51311e 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2134,7 +2134,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;