New submission from STINNER Victor <vstin...@redhat.com>:

Extract of _PySys_EndInit():

SET_SYS_FROM_STRING_BORROW("path", config->module_search_path);

sys.path is initialized from _PyMainInterpreterConfig.module_search_path 
object: the list of strings is not copied. As a consequence, when sys.path is 
modified, _PyMainInterpreterConfig is modified as well. For example, "import 
site" modifies sys.path.

I dislike this behavior. I prefer to see _PyMainInterpreterConfig as 
"constant": a snapshot of the configuration used to startup Python.

A side effect is that Py_NewInterpreter() copies the modified configuration, 
whereas starting from the "original" configuration. For the specific case of 
Py_NewInterpreter(), I'm not sure of what is the expected behavior... 
Py_NewInterpreter() imports the "site" module again, so it should reapply the 
same sys.path change.

Note: I found this bug while working on better tests for global, core and main 
configurations: https://github.com/python/cpython/pull/10524

----------
components: Interpreter Core
messages: 329872
nosy: eric.snow, ncoghlan, vstinner
priority: normal
severity: normal
status: open
title: _PySys_EndInit() doesn't copy main interpreter configuration
versions: Python 3.7, Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue35239>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to