https://github.com/python/cpython/commit/7b6e98911e1485be13817f2aedbbfadb1c4ea876
commit: 7b6e98911e1485be13817f2aedbbfadb1c4ea876
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2026-06-10T18:43:38+02:00
summary:
gh-151253: Dump the Python path configuration on _PyCodec_InitRegistry()
failure (#151250)
If "import encodings" fails at Python startup, dump the Python path
configuration to help users debugging their configuration. The
encodings module is the first module imported during Python startup.
files:
A
Misc/NEWS.d/next/Core_and_Builtins/2026-06-10-15-42-46.gh-issue-151253.7MMQ8P.rst
M Lib/test/test_cmd_line.py
M Python/codecs.c
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index 3b556ec31445df..a8645af26b25d8 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -1314,6 +1314,17 @@ def test_presite(self):
proc = assert_python_ok("-X", f"presite={entrypoint}", "-c", "pass")
self.assertEqual(proc.out.rstrip(), b"presite func")
+ def test_dump_path_config(self):
+ # gh-151253: At the first import (import encodings) during Python
+ # startup, if the import fails, dump the Python path configuration.
+ nonexistent = '/nonexistent-python-path'
+ # Use -X frozen_modules=off to disable frozen encodings module
+ # on release build.
+ cmd = ["-X", "frozen_modules=off", "-c", "pass"]
+ proc = assert_python_failure(*cmd, PYTHONHOME=nonexistent)
+ self.assertIn(b'Python path configuration:', proc.err)
+ self.assertIn(f"PYTHONHOME = '{nonexistent}'".encode(), proc.err)
+
@unittest.skipIf(interpreter_requires_environment(),
'Cannot run -I tests when PYTHON env vars are required.')
diff --git
a/Misc/NEWS.d/next/Core_and_Builtins/2026-06-10-15-42-46.gh-issue-151253.7MMQ8P.rst
b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-10-15-42-46.gh-issue-151253.7MMQ8P.rst
new file mode 100644
index 00000000000000..56d2f3b2633bb0
--- /dev/null
+++
b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-10-15-42-46.gh-issue-151253.7MMQ8P.rst
@@ -0,0 +1,3 @@
+If ``import encodings`` (first import) fails at Python startup, dump the
+Python path configuration to help users debugging their configuration. Patch
+by Victor Stinner.
diff --git a/Python/codecs.c b/Python/codecs.c
index a522e6b88068b3..6d1ae651fa0005 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -11,6 +11,7 @@ Copyright (c) Corporation for National Research Initiatives.
#include "Python.h"
#include "pycore_call.h" // _PyObject_CallNoArgs()
#include "pycore_codecs.h" // export _PyCodec_LookupTextEncoding()
+#include "pycore_initconfig.h" // _Py_DumpPathConfig()
#include "pycore_interp.h" // PyInterpreterState.codec_search_path
#include "pycore_pyerrors.h" // _PyErr_FormatNote()
#include "pycore_pystate.h" // _PyInterpreterState_GET()
@@ -1686,6 +1687,8 @@ _PyCodec_InitRegistry(PyInterpreterState *interp)
// search functions, so this is done after everything else is initialized.
PyObject *mod = PyImport_ImportModule("encodings");
if (mod == NULL) {
+ PyThreadState *tstate = _PyThreadState_GET();
+ _Py_DumpPathConfig(tstate);
return PyStatus_Error("Failed to import encodings module");
}
Py_DECREF(mod);
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]