mirror of https://github.com/python/cpython
gh-92345: Import rlcompleter before sys.path is extended (#92346)
``pymain_run_python()`` now imports ``readline`` and ``rlcompleter`` before sys.path is extended to include the current working directory of an interactive interpreter. Non-interactive interpreters are not affected. Also move imports of ``re`` and ``keyword`` module to top level so they are materialized early, too. The ``keyword`` module is trivial and the ``re`` is already imported via ``inspect`` -> ``linecache``.
This commit is contained in:
parent
1ed8d035f1
commit
8122e8d501
|
@ -32,6 +32,8 @@ Notes:
|
|||
import atexit
|
||||
import builtins
|
||||
import inspect
|
||||
import keyword
|
||||
import re
|
||||
import __main__
|
||||
|
||||
__all__ = ["Completer"]
|
||||
|
@ -113,7 +115,6 @@ class Completer:
|
|||
defined in self.namespace that match.
|
||||
|
||||
"""
|
||||
import keyword
|
||||
matches = []
|
||||
seen = {"__builtins__"}
|
||||
n = len(text)
|
||||
|
@ -146,7 +147,6 @@ class Completer:
|
|||
with a __getattr__ hook is evaluated.
|
||||
|
||||
"""
|
||||
import re
|
||||
m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text)
|
||||
if not m:
|
||||
return []
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
``pymain_run_python()`` now imports ``readline`` and ``rlcompleter`` before
|
||||
sys.path is extended to include the current working directory of an
|
||||
interactive interpreter. Non-interactive interpreters are not affected.
|
|
@ -219,6 +219,13 @@ pymain_import_readline(const PyConfig *config)
|
|||
else {
|
||||
Py_DECREF(mod);
|
||||
}
|
||||
mod = PyImport_ImportModule("rlcompleter");
|
||||
if (mod == NULL) {
|
||||
PyErr_Clear();
|
||||
}
|
||||
else {
|
||||
Py_DECREF(mod);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -555,6 +562,9 @@ pymain_run_python(int *exitcode)
|
|||
}
|
||||
}
|
||||
|
||||
// import readline and rlcompleter before script dir is added to sys.path
|
||||
pymain_import_readline(config);
|
||||
|
||||
if (main_importer_path != NULL) {
|
||||
if (pymain_sys_path_add_path0(interp, main_importer_path) < 0) {
|
||||
goto error;
|
||||
|
@ -577,7 +587,6 @@ pymain_run_python(int *exitcode)
|
|||
}
|
||||
|
||||
pymain_header(config);
|
||||
pymain_import_readline(config);
|
||||
|
||||
if (config->run_command) {
|
||||
*exitcode = pymain_run_command(config->run_command);
|
||||
|
|
Loading…
Reference in New Issue