You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
pdb does not lazy-import rlcompleter, leading to non-lazy import of readline #138860
Starting in Python 3.13, Lib/pdb.py contains a top-level from rlcompleter import Completer, which indirectly causes a top-level import readline, which deadlocks waiting to access stdin if pdb is imported directly or indirectly in a subprocess launched with either process_group=0 or preexec_fn=setpgrp.
Proposed change
Remove top-level from rlcompleter import Completer from Lib/pdb.py.
python/cpython PR 112950, released in Python 3.13, added the from rlcompleter import Completer to Lib/pdb.py. There was no top-level indirect import of readline before this.
This only impacts import readline when it's backed by GNU libreadline. Notably, the Mac default Python installation uses libedit instead, so on Macs this can only be reproduced by using conda or pyenv with a separately downloaded copy of Python 3.13.
Rationale
Any code that directly or indirectly imports pdb ends up importing readline, potentially causing a deadlock, even if the caller never actually intends to use pdb.
Notably, all direct cases of import readline in Lib/pdb.py are already lazy, so this is a an established pattern that was broken by the top-level rlcompleter import.
Full writeup
This issue focuses on the pdb part of the problem.
Activity
kelu-wandb commentedon Sep 12, 2025
cc @gaogaotiantian and @iritkatriel , author and reviewer of #112950
gaogaotiantian commentedon Sep 20, 2025
This is a reasonable request. I'll fix it.
gh-138860: Lazy import rlcompleter in pdb to avoid deadlock in subpro…
pythongh-138860: Lazy import rlcompleter in pdb to avoid deadlock in …
[3.13] gh-138860: Lazy import rlcompleter in pdb to avoid deadlock in… (
[3.14] gh-138860: Lazy import rlcompleter in pdb to avoid deadlock in…