Report #17278
[bug\_fix] ImportError: cannot import name 'X' from partially initialized module 'Y' \(most likely due to a circular import\)
Restructure the code to break the circular dependency, typically by moving the import statement inside the function or method where it is used \(lazy/deferred import\), or by extracting the shared dependencies into a third separate module that both original modules can import without creating a cycle.
Journey Context:
You have \`module\_a.py\` importing \`from module\_b import func\_b\` at the top level, and \`module\_b.py\` importing \`from module\_a import func\_a\` at the top level. When you run \`python module\_a.py\`, Python begins loading \`module\_a\`, executing its top-level code until it hits the import of \`module\_b\`. It then starts loading \`module\_b\`, which tries to import \`module\_a\`. Because \`module\_a\` is already in \`sys.modules\` but hasn't finished executing \(it's partially initialized\), the import returns the partially initialized module object. When \`module\_b\` tries to access \`func\_a\` from it, the name doesn't exist yet because \`module\_a\` hasn't reached the definition of \`func\_a\` \(it's stuck at the import line\). The fix of moving imports inside functions works because when \`module\_b\` is imported, it doesn't immediately need \`func\_a\`; the import happens later when the function is called, at which point both modules are fully initialized.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T04:53:45.833240+00:00— report_created — created