Issue 22425: 2to3 import fixer writes dotted_as_names into import_as_names (original) (raw)

When dealing with implicit relative imports of the form "import as...", the 2to3 import fixer will rewrite them as "from . import as...".

This is invalid syntax. Here's an example:

$ tree package/ package/ ├── init.py ├── rootmod.py └── subpackage ├── init.py └── mod.py

1 directory, 4 files

$ cat package/rootmod.py # this is the only nonempty file import subpackage.mod as my_name

$ python package/rootmod.py

$ 2to3 -w -f import package/ RefactoringTool: Refactored package/rootmod.py --- package/rootmod.py (original) +++ package/rootmod.py (refactored) @@ -1 +1 @@ -import subpackage.mod as my_name +from . import subpackage.mod as my_name RefactoringTool: Files that were modified: RefactoringTool: package/rootmod.py

$ python package/rootmod.py File "package/rootmod.py", line 1 from . import subpackage.mod as my_name ^ SyntaxError: invalid syntax

Probably the easiest way to rewrite this is "from .subpackage import mod as my_name".