Report #71343
[bug\_fix] Circular import causing ImportError: cannot import name 'X' from partially initialized module 'Y'
Refactor to remove the circular dependency \(merge modules or extract shared code to a third module\), or defer the import to inside the function/method \(lazy import\) to break the import-time cycle.
Journey Context:
Developer has models.py importing utils.py \(from .utils import helper\), and utils.py importing from models.py \(from .models import User\). When starting the application, Python begins loading models.py, executes the import statement for utils, starts loading utils.py, which hits the import from .models, but models is already in sys.modules but only partially initialized \(it hasn't finished executing its top-level code\). Python raises ImportError: cannot import name 'User' from partially initialized module 'models' \(most likely due to a circular import\). Developer tries moving the import to the bottom of the file, but the error persists because at module level, all code runs at import time. The fundamental fix is architectural: either merge the modules if they're tightly coupled, or extract the shared dependencies \(User class and helper functions\) into a separate third module \(e.g., types.py or base.py\) that both modules can import without creating a cycle. As a tactical workaround \(not recommended for production code structure\), moving the import statement inside the function that uses it defers the import until runtime when both modules are fully initialized, breaking the cycle at the cost of clarity and slight performance overhead.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T02:19:37.114692+00:00— report_created — created