gh-110722: Add PYTHON_PRESITE to import a module before site.py is run (#110769)

This commit is contained in:
Łukasz Langa 2023-10-14 23:32:57 +02:00 committed by GitHub
parent ab08ff7882
commit 84b7e9e3fa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 178 additions and 7 deletions

View file

@ -1076,6 +1076,38 @@ pyinit_main_reconfigure(PyThreadState *tstate)
}
#ifdef Py_DEBUG
static void
run_presite(PyThreadState *tstate)
{
PyInterpreterState *interp = tstate->interp;
const PyConfig *config = _PyInterpreterState_GetConfig(interp);
if (!config->run_presite) {
return;
}
PyObject *presite_modname = PyUnicode_FromWideChar(
config->run_presite,
wcslen(config->run_presite)
);
if (presite_modname == NULL) {
fprintf(stderr, "Could not convert pre-site module name to unicode\n");
Py_DECREF(presite_modname);
}
else {
PyObject *presite = PyImport_Import(presite_modname);
if (presite == NULL) {
fprintf(stderr, "pre-site import failed:\n");
_PyErr_Print(tstate);
}
Py_XDECREF(presite);
Py_DECREF(presite_modname);
}
}
#endif
static PyStatus
init_interp_main(PyThreadState *tstate)
{
@ -1157,6 +1189,10 @@ init_interp_main(PyThreadState *tstate)
return status;
}
#ifdef Py_DEBUG
run_presite(tstate);
#endif
status = add_main_module(interp);
if (_PyStatus_EXCEPTION(status)) {
return status;