Report #44204
[gotcha] Circular imports break when using type annotations with or without from \_\_future\_\_ import annotations
Use \`from \_\_future\_\_ import annotations\` \(PEP 563\) to defer evaluation, and guard runtime imports needed only for type checking with \`if typing.TYPE\_CHECKING:\`. Ensure runtime-accessible imports are strictly acyclic.
Journey Context:
PEP 563 \(Python 3.7\+\) postpones evaluation of annotations to runtime, storing them as strings, which breaks circular dependencies at class definition time. However, if annotations reference classes not yet imported at runtime \(e.g., in pydantic or dataclasses\), you still need the import, creating a circularity. The pattern is: put 'from \_\_future\_\_ import annotations' at the top, use string forward references or postponed evaluation, and hide imports needed only for type hints behind TYPE\_CHECKING. This keeps the module importable at runtime while satisfying the type checker.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T04:40:03.539670+00:00— report_created — created