Skip to content

Circular lazy import results in a crash #144727

Closed

Description

@ZeroIntensity

Crash report

What happened?

Not even 3 hours since PEP 810 got merged, we already have a crash!

# a.py
lazy import b

def something():
    b.hello()

something()
# b.py
lazy import a

def hello():
    print(a)

Running a.py will result in the following crash:

Python/gc.c:533: visit_decref: Assertion "!_PyObject_IsFreed(op)" failed
Enable tracemalloc to get the memory block allocation traceback

object address  : 0x7fcfb75797f0
object refcount : 2
object type     : 0x55a7d0ea0140
object type name: dict
object repr     : [1]    38419 segmentation fault (core dumped)  /home/peter/develop/cpython/python a.py

Sometimes an ImportCycleError shows up before the crash as well:

Traceback (most recent call last):
  File "/home/peter/develop/cpython/b.py", line 1, in <module>
    lazy import a
ImportError: deferred import of 'a' raised an exception during resolution

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/peter/develop/cpython/a.py", line 6, in <module>
    something()
    ~~~~~~~~~^^
  File "/home/peter/develop/cpython/a.py", line 4, in something
    b.hello()
    ~~~~~~~^^
  File "/home/peter/develop/cpython/b.py", line 4, in hello
    print(a)
          ^
  File "/home/peter/develop/cpython/a.py", line 6, in <module>
    something()
    ~~~~~~~~~^^
  File "/home/peter/develop/cpython/a.py", line 4, in something
    b.hello()
    ~~~~~~~^^
  File "/home/peter/develop/cpython/b.py", line 4, in hello
    print(a)
          ^
ImportCycleError: cannot import name 'a' (most likely due to a circular import)

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Output from running 'python -VV' on the command line:

No response

Linked PRs

Activity

  1. added
    interpreter-core(Objects, Python, Grammar, and Parser dirs)
    type-crashA hard crash of the interpreter, possibly with a core dump
    3.15bugs and security fixes
    on Feb 12, 2026
  2. robsdedude commented on Feb 12, 2026

    @robsdedude
    Contributor

    Can no longer reproduce the crash since gh-144733 has been merged.

    However, the same code works when doing the lazy import manually, i.e.,

    # a.py
    def something():
        import b
        b.hello()
    
    something()
    # b.py
    def hello():
        import a
        print(a)

    Reading the PEP, I'm not quite sure whether this is supposed to work with lazy imports or not.

  3. ZeroIntensity commented on Feb 12, 2026

    @ZeroIntensity
    MemberAuthor

    Thanks, I missed that PR.

    @pablogsal No test case for #144733? This seems like a fairly common thing to try.

  4. pablogsal commented on Feb 12, 2026

    @pablogsal
    Member

    Thanks, I missed that PR.

    @pablogsal No test case for #144733? This seems like a fairly common thing to try.

    Do you want to open a PR adding it?

  5. added a commit that references this issue on Feb 15, 2026
  6. pablogsal commented on Feb 15, 2026

    @pablogsal
    Member

    Opened #144838

  7. added 2 commits that reference this issue on Feb 15, 2026
  8. added a commit that references this issue on Feb 28, 2026
  9. added a commit that references this issue on Apr 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.15bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)type-crashA hard crash of the interpreter, possibly with a core dump

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions