@@ -429,25 +429,20 @@ _Py_SetLocaleFromEnv(int category)
429429
430430
431431static int
432- interpreter_set_config ( const PyConfig * config )
432+ interpreter_update_config ( PyThreadState * tstate , int only_update_path_config )
433433{
434- PyThreadState * tstate = PyThreadState_Get () ;
434+ const PyConfig * config = & tstate -> interp -> config ;
435435
436- PyStatus status = _PyConfig_Write (config , tstate -> interp -> runtime );
437- if (_PyStatus_EXCEPTION (status )) {
438- _PyErr_SetFromPyStatus (status );
439- return -1 ;
440- }
441-
442- status = _PyConfig_Copy (& tstate -> interp -> config , config );
443- if (_PyStatus_EXCEPTION (status )) {
444- _PyErr_SetFromPyStatus (status );
445- return -1 ;
436+ if (!only_update_path_config ) {
437+ PyStatus status = _PyConfig_Write (config , tstate -> interp -> runtime );
438+ if (_PyStatus_EXCEPTION (status )) {
439+ _PyErr_SetFromPyStatus (status );
440+ return -1 ;
441+ }
446442 }
447- config = & tstate -> interp -> config ;
448443
449- if (config -> _install_importlib && _Py_IsMainInterpreter (tstate )) {
450- status = _PyConfig_WritePathConfig (config );
444+ if (_Py_IsMainInterpreter (tstate )) {
445+ PyStatus status = _PyConfig_WritePathConfig (config );
451446 if (_PyStatus_EXCEPTION (status )) {
452447 _PyErr_SetFromPyStatus (status );
453448 return -1 ;
@@ -465,6 +460,7 @@ interpreter_set_config(const PyConfig *config)
465460int
466461_PyInterpreterState_SetConfig (const PyConfig * src_config )
467462{
463+ PyThreadState * tstate = PyThreadState_Get ();
468464 int res = -1 ;
469465
470466 PyConfig config ;
@@ -481,7 +477,13 @@ _PyInterpreterState_SetConfig(const PyConfig *src_config)
481477 goto done ;
482478 }
483479
484- res = interpreter_set_config (& config );
480+ status = _PyConfig_Copy (& tstate -> interp -> config , & config );
481+ if (_PyStatus_EXCEPTION (status )) {
482+ _PyErr_SetFromPyStatus (status );
483+ goto done ;
484+ }
485+
486+ res = interpreter_update_config (tstate , 0 );
485487
486488done :
487489 PyConfig_Clear (& config );
@@ -763,13 +765,6 @@ pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
763765
764766 const PyConfig * config = _PyInterpreterState_GetConfig (tstate -> interp );
765767 if (config -> _install_importlib ) {
766- if (_Py_IsMainInterpreter (tstate )) {
767- status = _PyConfig_WritePathConfig (config );
768- if (_PyStatus_EXCEPTION (status )) {
769- return status ;
770- }
771- }
772-
773768 /* This call sets up builtin and frozen import support */
774769 status = init_importlib (tstate , sysmod );
775770 if (_PyStatus_EXCEPTION (status )) {
@@ -985,7 +980,9 @@ pyinit_core(_PyRuntimeState *runtime,
985980 goto done ;
986981 }
987982
988- status = PyConfig_Read (& config );
983+ // Read the configuration, but don't compute the path configuration
984+ // (it is computed in the main init).
985+ status = _PyConfig_Read (& config , 0 );
989986 if (_PyStatus_EXCEPTION (status )) {
990987 goto done ;
991988 }
@@ -1012,8 +1009,8 @@ pyinit_core(_PyRuntimeState *runtime,
10121009static PyStatus
10131010pyinit_main_reconfigure (PyThreadState * tstate )
10141011{
1015- if (_PySys_UpdateConfig (tstate ) < 0 ) {
1016- return _PyStatus_ERR ("fail to update sys for the new conf " );
1012+ if (interpreter_update_config (tstate , 0 ) < 0 ) {
1013+ return _PyStatus_ERR ("fail to reconfigure Python " );
10171014 }
10181015 return _PyStatus_OK ();
10191016}
@@ -1041,14 +1038,20 @@ init_interp_main(PyThreadState *tstate)
10411038 return _PyStatus_OK ();
10421039 }
10431040
1041+ // Compute the path configuration
1042+ status = _PyConfig_InitPathConfig (& interp -> config );
1043+ if (_PyStatus_EXCEPTION (status )) {
1044+ return status ;
1045+ }
1046+
10441047 if (is_main_interp ) {
10451048 if (_PyTime_Init () < 0 ) {
10461049 return _PyStatus_ERR ("can't initialize time" );
10471050 }
10481051 }
10491052
1050- if (_PySys_UpdateConfig (tstate ) < 0 ) {
1051- return _PyStatus_ERR ("can't finish initializing sys " );
1053+ if (interpreter_update_config (tstate , 1 ) < 0 ) {
1054+ return _PyStatus_ERR ("failed to update the Python config " );
10521055 }
10531056
10541057 status = init_importlib_external (tstate );
0 commit comments