This can be overridden in the sitecustomize or usercustomize module,
or in a PYTHONSTARTUP file.
"""
+ if not sys.flags.ignore_environment:
+ PYTHON_BASIC_REPL = os.getenv("PYTHON_BASIC_REPL")
+ else:
+ PYTHON_BASIC_REPL = False
+
import atexit
try:
import readline
import rlcompleter
- import _pyrepl.readline
- import _pyrepl.unix_console
+ if PYTHON_BASIC_REPL:
+ CAN_USE_PYREPL = False
+ else:
+ import _pyrepl.readline
+ import _pyrepl.unix_console
+ from _pyrepl.main import CAN_USE_PYREPL
except ImportError:
return
pass
if readline.get_current_history_length() == 0:
- from _pyrepl.main import CAN_USE_PYREPL
# If no history was loaded, default to .python_history,
# or PYTHON_HISTORY.
# The guard is necessary to avoid doubling history size at
# through a PYTHONSTARTUP hook, see:
# http://bugs.python.org/issue5845#msg198636
history = gethistoryfile()
- if os.getenv("PYTHON_BASIC_REPL") or not CAN_USE_PYREPL:
- readline_module = readline
- else:
+
+ if CAN_USE_PYREPL:
readline_module = _pyrepl.readline
+ exceptions = (OSError, *_pyrepl.unix_console._error)
+ else:
+ readline_module = readline
+ exceptions = OSError
+
try:
readline_module.read_history_file(history)
- except (OSError,* _pyrepl.unix_console._error):
+ except exceptions:
pass
def write_history():
self.assertNotIn("Exception", output)
self.assertNotIn("Traceback", output)
+ # The site module must not load _pyrepl if PYTHON_BASIC_REPL is set
+ commands = ("import sys\n"
+ "print('_pyrepl' in sys.modules)\n"
+ "exit()\n")
+ env["PYTHON_BASIC_REPL"] = "1"
+ output, exit_code = self.run_repl(commands, env=env)
+ self.assertEqual(exit_code, 0)
+ self.assertIn("False", output)
+ self.assertNotIn("True", output)
+ self.assertNotIn("Exception", output)
+ self.assertNotIn("Traceback", output)
+
@force_not_colorized
def test_bad_sys_excepthook_doesnt_crash_pyrepl(self):
env = os.environ.copy()
--- /dev/null
+If the :envvar:`PYTHON_BASIC_REPL` environment variable is set, the
+:mod:`site` module no longer imports the :mod:`!_pyrepl` module. Moreover,
+the :mod:`site` module now respects :option:`-E` and :option:`-I` command
+line options: ignore :envvar:`PYTHON_BASIC_REPL` in this case. Patch by
+Victor Stinner.