Answering Eric's question about the flag variables though:
* pymain_get_global_config copies the global variable flags to their respective struct entries
* pymain_set_global_config copies the various struct entries to their respective global variable flags
One of the first things that Py_Main() does in 3.7 is to:
- read the global variable flags into the relevant structs
- update the structs based on the CLI options
- write the struct values back to the global flags
This mostly fakes the 3.6-and-earlier behaviour of using the global variables directly.
For anything listed in https://docs.python.org/3/c-api/init.html#global-configuration-variables, we also mostly left any code reading the global variable directly alone, since they're considered a public API for embedding applications to dynamically adjust behaviour and we don't have a good way of deprecating using them for that purpose :(