classification
Title: Some Invalid Relative Imports succeed in Py 3.0 & 3.1 [& correctly fail in 3.2rc1]
Type: behavior Stage: resolved
Components: Interpreter Core Versions: Python 3.1, Python 3.2
process
Status: closed Resolution: duplicate
Dependencies: Superseder: relative import broken
View: 7902
Assigned To: Nosy List: brett.cannon, mark, ncoghlan, orsenthil
Priority: normal Keywords:

Created on 2011-01-17 14:28 by mark, last changed 2011-01-17 17:01 by r.david.murray. This issue is now closed.

Files
File name Uploaded Description Edit
py-import-bug.tar.gz mark, 2011-01-17 14:28
Messages (3)
msg126399 - (view) Author: Mark Summerfield (mark) * Date: 2011-01-17 14:28
I'm reporting this at Georg Brandl's suggestion.

If you unpack the attached (tiny) tarball you get this directory structure:

Graphics/
Graphics/Xpm.py
Graphics/Vector/
Graphics/Vector/__init__.py
Graphics/Vector/Svg.py
Graphics/__init__.py

The Svg.py file has this content:

#!/usr/bin/env python3
from ..Graphics import Xpm
SVG = 1

Here are 3 interactive actions, one each for 3.0, 3.1, and 3.2rc1:

$ python30
Python 3.0.1 (r301:69556, Jul 15 2010, 10:31:51) 
[GCC 4.4.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from Graphics.Vector import *
>>> Svg.SVG
1

$ python31
Python 3.1.2 (r312:79147, Jul 15 2010, 10:56:05) 
[GCC 4.4.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from Graphics.Vector import *
>>> Svg.SVG
1

$ ~/opt/python32rc1/bin/python3
Python 3.2rc1 (r32rc1:88035, Jan 16 2011, 08:32:59) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from Graphics.Vector import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "Graphics/Vector/Svg.py", line 2, in <module>
    from ..Graphics import Xpm
ImportError: No module named Graphics

So clearly 3.0 and 3.1 have the same behavior as each other; and this is different from 3.2rc1, and Georg says that 3.0 and 3.1 have a bug and that 3.2rc1 is correct.

PS R. David Murray suggests that this might be related to
http://bugs.python.org/issue7902
msg126404 - (view) Author: Nick Coghlan (ncoghlan) * (Python committer) Date: 2011-01-17 15:16
Yeah, 7902 was a bug that tried to do an absolute import if an explicit relative import failed to find anything (i.e. it had inherited the old implicit relative import fallback, which was entirely inappropriate for the new use case).

Since the significant import in these examples should correctly be written as "from .. import Xpm", it should fail in 2.6.6 and 3.1.3 as well.

If you could confirm that at least 3.1.3 also gives the expected error message, we'll close this as a dupe of 7902.
msg126409 - (view) Author: Mark Summerfield (mark) * Date: 2011-01-17 16:30
I just installed 3.1.3 and it does indeed give the import error:

Python 3.1.3 (r313:86834, Jan 17 2011, 16:29:46) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from Graphics.Vector import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "Graphics/Vector/Svg.py", line 2, in <module>
    from ..Graphics import Xpm
ImportError: No module named Graphics
History
Date User Action Args
2011-01-17 17:01:49r.david.murraysetstatus: open -> closed
nosy: brett.cannon, ncoghlan, orsenthil, mark
superseder: relative import broken
resolution: duplicate
stage: resolved
2011-01-17 16:30:07marksetnosy: brett.cannon, ncoghlan, orsenthil, mark
messages: + msg126409
2011-01-17 15:16:42ncoghlansetnosy: + ncoghlan
messages: + msg126404
2011-01-17 15:06:58orsenthilsetnosy: + orsenthil
2011-01-17 14:56:34pitrousetnosy: + brett.cannon
2011-01-17 14:28:30markcreate