Bug in 2to3 concerning import statements?
It seems that 2to3 is a bit simplistic when it comes to translating import statements. I have a module GUI.py2exe containing: import py2exe.mf as modulefinder 2to3 translates this into: from . import py2exe.mf as modulefinder which is a syntax error. It looks like 2to3 is getting confused by the fact that there is both a submodule and a top-level module here called py2exe. But the original can only be an absolute import because it has a dot in it, so 2to3 shouldn't be translating it into a relative one. Putting "from __future__ import absolute_import" at the top fixes it, but I shouldn't have to do that, should I? -- Greg
On Sat, 30 Apr 2016 at 21:51 Greg Ewing <greg.ewing@canterbury.ac.nz> wrote:
It seems that 2to3 is a bit simplistic when it comes to translating import statements. I have a module GUI.py2exe containing:
import py2exe.mf as modulefinder
2to3 translates this into:
from . import py2exe.mf as modulefinder
which is a syntax error.
It looks like 2to3 is getting confused by the fact that there is both a submodule and a top-level module here called py2exe.
That sounds right. 2to3 has to inspect the environment to figure out if the import was meant to be relative or absolute and it's getting confused.
But the original can only be an absolute import because it has a dot in it, so 2to3 shouldn't be translating it into a relative one.
2to3 is nowhere near that sophisticated for tweaking imports :)
Putting "from __future__ import absolute_import" at the top fixes it, but I shouldn't have to do that, should I?
There's all sorts of weird stuff going on in that import, like having a dot in the `from` part of the import instead of doing `from .py2exe import mf as modulefinder`. Try that tweak and see if that solves your SyntaxError for some reason.
Brett Cannon wrote:
There's all sorts of weird stuff going on in that import, like having a dot in the `from` part of the import instead of doing `from .py2exe import mf as modulefinder`.
If I did that, it would try to import mf from the py2exe submodule rather than the global one. In hindsight it was probably a bad idea to name the submodule py2exe, but the code worked as intended. My point is that, regardless of anything else, 2to3 shouldn't be generating syntactically incorrect code. I can understand if it's not considered worth fixing, but it's still a bug. -- Greg
I agree it's a bug. May I encourage you to file it as such on bugs.python.org? 2to3 is part of the stdlib. On Sun, May 1, 2016 at 4:42 PM, Greg Ewing <greg.ewing@canterbury.ac.nz> wrote:
Brett Cannon wrote:
There's all sorts of weird stuff going on in that import, like having a
dot in the `from` part of the import instead of doing `from .py2exe import mf as modulefinder`.
If I did that, it would try to import mf from the py2exe submodule rather than the global one.
In hindsight it was probably a bad idea to name the submodule py2exe, but the code worked as intended.
My point is that, regardless of anything else, 2to3 shouldn't be generating syntactically incorrect code. I can understand if it's not considered worth fixing, but it's still a bug.
-- Greg _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/guido%40python.org
-- --Guido van Rossum (python.org/~guido)
participants (3)
-
Brett Cannon
-
Greg Ewing
-
Guido van Rossum