Skip to content

gh-119512: Use new REPL for the code module - #148261

Open
tanloong wants to merge 10 commits into
python:mainfrom
tanloong:code-pyrepl
Open

gh-119512: Use new REPL for the code module#148261
tanloong wants to merge 10 commits into
python:mainfrom
tanloong:code-pyrepl

Conversation

@tanloong

@tanloong tanloong commented Apr 8, 2026

Copy link
Copy Markdown
Contributor

This adds an optional use_pyrepl: bool|None=False parameter to code.InteractiveConsole.interact() and code.interact().

When set as True, pyrepl is used. When False (the default), the basic readline-based REPL is used. When None, pyrepl is used if available and the PYTHON_BASIC_REPL environment variable is not set.

@tanloong
tanloong requested a review from AA-Turner as a code owner April 8, 2026 17:37

@skirpichev skirpichev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread Doc/library/code.rst
Comment on lines +174 to +176
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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@tanloong tanloong Apr 9, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your review!

I believe adding the use_pyrepl parameter is necessary, and it should default to False rather than None.

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 relies on GNU Readline for completion. If we enable the new REPL by default, its completion will break, and we will also see incorrect syntax highlighting: tokens in SQLite statements that coincide with Python keywords will be highlighted mistakenly by PyREPL. Similar issues would affect those among the 1.2k subclasses that implemented their own custom syntax and completions.

For backward compatibility, I think keeping use_pyrepl=False as the default is the safest approach.

Comment thread Doc/whatsnew/3.15.rst
@read-the-docs-community

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

This PR is stale because it has been open for 90 days with no activity.

@github-actions github-actions Bot added the stale Stale PR or inactive for long period of time. label Aug 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting review stale Stale PR or inactive for long period of time.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants