mypy icon indicating copy to clipboard operation
mypy copied to clipboard

Namespace packages and __init__ imports

Open hauntsaninja opened this issue 4 years ago • 2 comments

--namespace-packages runs into an issue if we import from __init__.py explicitly.

For instance, given:

.
└── proj
    ├── __init__.py
    └── a.py

$ cat proj/__init__.py 
x: int

$ cat proj/a.py       
from .__init__ import x

$ cat proj/b.py
from proj.__init__ import x

running mypy will result in:

$ mypy proj --namespace-packages
proj/__init__.py: error: Source file found twice under different module names: 'proj' and 'proj.__init__'

This issue comes up at least twice in mypy_primer's corpus.

This is correct in that you do get two entries in sys.modules, but undesirable for this to block type checking

hauntsaninja avatar Nov 12 '20 09:11 hauntsaninja

Wow, I didn't even know that from .__init__ import ... is a thing. If it works at runtime and does something useful, we should probably try to support it.

JukkaL avatar Nov 12 '20 19:11 JukkaL

Yeah, I wouldn't really care about it if not for the fact that "Source file found twice under different module names" is a blocking error and in this case it's really hard to figure out what's causing it. So kind of painful in the context of #9636

hauntsaninja avatar Nov 12 '20 20:11 hauntsaninja