bpo-35239: _PySys_EndInit() copies module_search_path (GH-10532)
* The _PySys_EndInit() function now copies the
config->module_search_path list, so config is longer modified when
sys.path is updated.
* config->warnoptions list and config->xoptions dict are also copied
* test_embed: InitConfigTests now also tests
main_config['module_search_path']
* Fix _Py_InitializeMainInterpreter(): don't use config->warnoptions
but sys.warnoptions to decide if the warnings module should
be imported at startup.
(cherry picked from commit 37cd982df02795905886ab36a2378ed557cb6f60)
Co-authored-by: Victor Stinner <vstinner@redhat.com>
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 86f95de..7eaf376 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -967,8 +967,8 @@
}
/* Initialize warnings. */
- if (interp->config.warnoptions != NULL &&
- PyList_Size(interp->config.warnoptions) > 0)
+ PyObject *warnoptions = PySys_GetObject("warnoptions");
+ if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
{
PyObject *warnings_module = PyImport_ImportModule("warnings");
if (warnings_module == NULL) {