@@ -332,14 +332,6 @@ def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None,
332
332
except ImportError :
333
333
pass
334
334
335
- # GH-138860
336
- # We need to lazy-import rlcompleter to avoid deadlock
337
- # We cannot import it during self.complete* methods because importing
338
- # rlcompleter for the first time will overwrite readline's completer
339
- # So we import it here and save the Completer class
340
- from rlcompleter import Completer
341
- self .RlCompleter = Completer
342
-
343
335
self .allow_kbdint = False
344
336
self .nosigint = nosigint
345
337
# Consider these characters as part of the command so when the users type
@@ -918,6 +910,31 @@ def set_convenience_variable(self, frame, name, value):
918
910
# Generic completion functions. Individual complete_foo methods can be
919
911
# assigned below to one of these functions.
920
912
913
+ @property
914
+ def rlcompleter (self ):
915
+ """Return the `Completer` class from `rlcompleter`, while avoiding the
916
+ side effects of changing the completer from `import rlcompleter`.
917
+
918
+ This is a compromise between GH-138860 and GH-139289. If GH-139289 is
919
+ fixed, then we don't need this and we can just `import rlcompleter` in
920
+ `Pdb.__init__`.
921
+ """
922
+ if not hasattr (self , "_rlcompleter" ):
923
+ try :
924
+ import readline
925
+ except ImportError :
926
+ # readline is not available, just get the Completer
927
+ from rlcompleter import Completer
928
+ self ._rlcompleter = Completer
929
+ else :
930
+ # importing rlcompleter could have side effect of changing
931
+ # the current completer, we need to restore it
932
+ prev_completer = readline .get_completer ()
933
+ from rlcompleter import Completer
934
+ self ._rlcompleter = Completer
935
+ readline .set_completer (prev_completer )
936
+ return self ._rlcompleter
937
+
921
938
def completenames (self , text , line , begidx , endidx ):
922
939
# Overwrite completenames() of cmd so for the command completion,
923
940
# if no current command matches, check for expressions as well
@@ -996,7 +1013,7 @@ def completedefault(self, text, line, begidx, endidx):
996
1013
997
1014
state = 0
998
1015
matches = []
999
- completer = self .RlCompleter (self .curframe .f_globals | self .curframe . f_locals )
1016
+ completer = self .rlcompleter (self .curframe .f_globals | self .curframe_locals )
1000
1017
while (match := completer .complete (text , state )) is not None :
1001
1018
matches .append (match )
1002
1019
state += 1
0 commit comments