gh-119512: Use new REPL for the code module#148261
gh-119512: Use new REPL for the code module#148261tanloong wants to merge 9 commits intopython:mainfrom
Conversation
| the basic readline-based REPL is used. When ``None``, pyrepl is used | ||
| automatically if available and the :envvar:`PYTHON_BASIC_REPL` environment | ||
| variable is not set. |
There was a problem hiding this comment.
Why not make None behavior - default, and get rid of the use_pyrepl option? Users can override this by setting PYTHON_BASIC_REPL.
I presume, new option was chosen on ground backward-compatibility, but new REPL is an incompatible change by itself, this is just a continuation.
So, I think it's fine to remove added option, but please wait first feedback from core developers.
There was a problem hiding this comment.
Thanks for your review!
I believe adding the use_pyrepl parameter is necessary, and it should default to False rather than None.
While the new REPL itself is a incompatible change, many third-party projects subclass code.InteractiveConsole to implement custom shells (1.2k search results on GitHub). CPython's own sqlite3 CLI also builds on code.InteractiveConsole and uses completely different syntax and completion logic from Python. Many of these 1.2k subclasses likely implement their own custom syntax and completions, just like the sqlite3 CLI.
If we removed the use_pyrepl parameter and enabled the new REPL by default, it would break those custom shells, both the official sqlite3 CLI and many third-party ones.
For backward compatibility, I think keeping use_pyrepl=False as the default is the safest approach.
Doc/whatsnew/3.15.rst
Outdated
| (Contributed by Hugo van Kemenade in :gh:`146292`.) | ||
|
|
||
|
|
There was a problem hiding this comment.
This is unrelated change, please revert.
This adds an optional
use_pyrepl: bool|None=Falseparameter tocode.InteractiveConsole.interact()andcode.interact().When set as
True, pyrepl is used. WhenFalse(the default), the basic readline-based REPL is used. WhenNone, pyrepl is used if available and thePYTHON_BASIC_REPLenvironment variable is not set.