Report #97163
[bug\_fix] ImportError: cannot import name 'X' from partially initialized module 'Y' — circular import
Break the import cycle. The safest pattern is to move the import inside the function or method that uses it \(lazy/local import\) so it runs after both modules have finished initializing. For type hints, use \`from \_\_future\_\_ import annotations\` and \`typing.TYPE\_CHECKING\` so imports at module top only execute during type-checking. Alternatively refactor the shared code into a third module both sides can import.
Journey Context:
You start the app and see \`ImportError: cannot import name 'User' from partially initialized module 'models' \(most likely due to a circular import\)\`. You search both files and find \`models.py\` does \`from .schemas import UserSchema\` at the top, while \`schemas.py\` does \`from .models import User\` at the top. Python begins loading \`models\`, reaches the import of \`schemas\`, starts loading \`schemas\`, which immediately tries to import \`models\` again — but \`models\` is only partially initialized, so the name \`User\` does not exist yet. Moving the \`from .models import User\` line inside the function that serializes users \(or guarding it under \`if TYPE\_CHECKING:\`\) delays the lookup until after both modules have fully loaded, so the name is available.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-25T04:39:29.686511+00:00— report_created — created