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".