Skip to content

gh-156924: Try reifying lazy imports in ForwarRef.evaluate() - #156940

Merged
JelleZijlstra merged 4 commits into
python:mainfrom
Viicos:vp/forwardref-reify
Sep 9, 2026
Merged

gh-156924: Try reifying lazy imports in ForwarRef.evaluate()#156940
JelleZijlstra merged 4 commits into
python:mainfrom
Viicos:vp/forwardref-reify

Conversation

@Viicos

@Viicos Viicos commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Comment thread Lib/annotationlib.py Outdated
@JelleZijlstra JelleZijlstra added the needs backport to 3.15 pre-release feature fixes, bugs and security fixes label Sep 4, 2026
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
@DavidCEllis

Copy link
Copy Markdown
Contributor

This looks right to me, and it also now correctly resolves lazy imports that would succeed if the annotations would fail for a different reason (other than a missing name):

from annotationlib import get_annotations, Format

lazy from typing import Any

class Example:
    a: object.fail
    b: Any

annos = get_annotations(Example, format=Format.FORWARDREF)
print(annos['b'])

Before:

<lazy_import 'typing.Any'>

With this PR:

typing.Any

@JelleZijlstra

Copy link
Copy Markdown
Member

@Viicos could you add a unit test for the case @DavidCEllis brings up?

Comment thread Misc/NEWS.d/next/Library/2026-09-04-14-15-31.gh-issue-156924.3Ux7IJ.rst Outdated
Co-authored-by: Bartosz Sławecki <bartosz@ilikepython.com>
@JelleZijlstra
JelleZijlstra merged commit 52ffffe into python:main Sep 9, 2026
51 checks passed
@miss-islington-app

Copy link
Copy Markdown

Thanks @Viicos for the PR, and @JelleZijlstra for merging it 🌮🎉.. I'm working now to backport this PR to: 3.15.
🐍🍒⛏🤖

@bedevere-app

bedevere-app Bot commented Sep 9, 2026

Copy link
Copy Markdown

GH-157224 is a backport of this pull request to the 3.15 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.15 pre-release feature fixes, bugs and security fixes label Sep 9, 2026
hugovk pushed a commit that referenced this pull request Sep 10, 2026
…GH-156940) (#157224)

Co-authored-by: Victorien <65306057+Viicos@users.noreply.github.com>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Petr Viktorin <encukou@gmail.com>
Co-authored-by: Bartosz Sławecki <bartosz@ilikepython.com>
maurycy added a commit to maurycy/cpython that referenced this pull request Sep 10, 2026
* main: (158 commits)
  pythongh-156924: Try reifying lazy imports in `ForwarRef.evaluate()` (python#156940)
  pythongh-156233: Fix typos and code snippet errors in the docs (python#156475)
  pythongh-156837: Refer to yield expressions in generator function definitions (pythonGH-156863)
  pythongh-155292: Skip updating unicodedata with mismatched interpreter (pythonGH-157066)
  pythongh-157170: Document the scope of global curses settings (pythonGH-157207)
  pythongh-155966: Correct handling of `math.tanpi` poles (python#155980)
  pythongh-157170: Restore use_env() after test_use_prescr_screen in test_curses (pythonGH-157171)
  pythongh-156910: fix deadlock in type_set_abstractmethods under free-threading (python#156948)
  pythongh-155648: Write the empty and placeholder IDLE tests (python#156260)
  pythongh-153569: centralize formatted-string state and source spans (python#156484)
  pythongh-157137: Mark the PEP 820 soft deprecations as 3.15, not `next` (python#157138)
  pythongh-152433: Use regular LoadLibrary in UWP for Windows system libs (pythonGH-156972)
  pythongh-121617: Fix Py_CLEAR() memcpy in C++: replace NULL with _Py_NULL (python#157188)
  pythongh-157135: Fix documentation errors in the `math.atan{2}pi` functions (python#157136)
  pythongh-121617: Fix Py_CLEAR() in C++: replace NULL with _Py_NULL (python#157067)
  pythongh-156774: Speed up pdb startup with asyncio guard (python#156775)
  pythongh-156109: Allow static, non-framework iOS builds (python#156110)
  pythongh-156780: Emscripten: add missing EM_JS_DEPS (python#156798)
  pythongh-152936: Make privileged functions available on Android (python#152977)
  pythongh-123018: Keep the libedit history file header when truncating (pythonGH-157165)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants