Description
Bug Report
We're having a bit of trouble over in python/typeshed#11074. It seems like it's impossible to import importlib.readers
inside stdlib/importlib/machinery.pyi
and also use typing_extensions.TypeAlias
to explicitly demarcate type aliases inside stdlib/zipfile.pyi
. The cause appears to be a huge import cycle in our stubs for the standard library:
importlib.machinery
importsNamespaceReader
fromimportlib.resources.readers
importlib.reasources.readers
importszipfile.Path
fromzipfile
zipfile
importsTypeAlias
fromtyping_extensions
typing_extensions
importsget_original_bases
fromtypes
types
importsModuleSpec
fromimportlib.machinery
... and we're back at the beginning.
As a workaround, things seem to work fine for us if we just don't use typing_extensions.TypeAlias
for the problematic alias in zipfile.pyi
. But this behaviour from mypy seems buggy, so I figured it would be good to file a bug.
To Reproduce
I haven't been able to reproduce this issue outside of the typeshed context. However, I have reduced typeshed down to a "minimum viable typeshed" required to reproduce the bug (https://github.com/AlexWaygood/typeshed/tree/mypy-import-cycle-repro/stdlib). Here are the repro steps:
- Clone https://github.com/AlexWaygood/typeshed
- Checkout the
mypy-import-cycle-repro
branch of the repo - Create and activate a venv; run
pip install -r requirements-tests.txt
- Run
python tests/mypy_test.py stdlib -p3.12
Expected Behavior
Mypy handles the import cycle -- or at least gives an intelligible error reporting what the problem is.
Actual Behavior
stdlib\zipfile.pyi:4: error: Variable "zipfile._DateTuple" is not valid as a type [valid-type]
stdlib\zipfile.pyi:4: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
Your Environment
- Mypy version used: 1.7.1
- Mypy command-line flags: https://github.com/AlexWaygood/typeshed/blob/4235e8c82a0378b7ce5df878659ed0e909692f13/tests/mypy_test.py#L252-L275
- Python version used: 3.12