]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-92345: Import rlcompleter before sys.path is extended (#92346)
authorChristian Heimes <christian@python.org>
Thu, 5 May 2022 19:24:16 +0000 (21:24 +0200)
committerGitHub <noreply@github.com>
Thu, 5 May 2022 19:24:16 +0000 (21:24 +0200)
``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``.

Lib/rlcompleter.py
Misc/NEWS.d/next/Core and Builtins/2022-05-05-20-05-41.gh-issue-92345.lnN_RA.rst [new file with mode: 0644]
Modules/main.c

index 4ede6dcce3fea293fb3241029d00393ff1077ab1..206d6fb511cdf61c8551b5c608b1c55229f1880e 100644 (file)
@@ -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 []
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-05-05-20-05-41.gh-issue-92345.lnN_RA.rst b/Misc/NEWS.d/next/Core and Builtins/2022-05-05-20-05-41.gh-issue-92345.lnN_RA.rst
new file mode 100644 (file)
index 0000000..2e2a608
--- /dev/null
@@ -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.
index 2443f5631b94bb283b63e9f8c7cf35bc9f47efe9..624c0f394608521fc0fcb4612aed4174c5748de2 100644 (file)
@@ -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);