Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork34.1k
Open
Description
Bug report
Bug description:
Without lazy imports:python -c "from typing import Match; print(Match)"
typing.MatchWith 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 resolutionThe 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 alazy_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 failedFailed again{'ohno': <lazy_import 'demo_module.ohno'>}ohnoCPython versions tested on:
CPython main branch
Operating systems tested on:
No response