You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Without lazy imports: python -c "from typing import Match; print(Match)"
typing.Match
With lazy imports: python -c "lazy from typing import Match; print(Match)"
Traceback (most recent call last):
File "<string>", line 1, in <module>
lazy from typing import Match; print(Match)
ImportError: deferred import of 'typing.Match' raised an exception during resolution
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<string>", line 1, in <module>
lazy from typing import Match; print(Match)
^^^^^
ImportError: cannot import name 'Match' from 'typing' (.../src/cpython/Lib/typing.py)
I believe the underlying issue is that the lazy import statement creates a lazy_import object in the module __dict__ which then prevents the module __getattr__ from being called. This occurs even if the module has already been imported.
demo_module.py
def__getattr__(name):
returnname
demo_script.py
importdemo_modulelazyfromdemo_moduleimportohnotry:
print(ohno)
exceptImportError:
print("Import failed")
# The lazy from import has placed the ohno object in demo_module's globalstry:
print(demo_module.ohno)
exceptImportError:
print("Failed again")
print({k: vfork, vindemo_module.__dict__.items() ifnotk.startswith("_")})
demo_module.__dict__.pop("ohno", None)
print(demo_module.ohno)
python demo_script.py
Import failed
Failed again
{'ohno': <lazy_import 'demo_module.ohno'>}
ohno
Bug report
Bug description:
Without lazy imports:
python -c "from typing import Match; print(Match)"With lazy imports:
python -c "lazy from typing import Match; print(Match)"I believe the underlying issue is that the lazy import statement creates a
lazy_importobject in the module__dict__which then prevents the module__getattr__from being called. This occurs even if the module has already been imported.demo_module.pydemo_script.pypython demo_script.pyCPython versions tested on:
CPython main branch
Operating systems tested on:
No response
Linked PRs