Where Online Learning is simpler!
The C and C++ Include Header Files
cat -n /usr/include/python3.14/cpython/pylifecycle.h
1 #ifndef Py_CPYTHON_PYLIFECYCLE_H 2 # error "this header file must not be included directly" 3 #endif 4 5 /* Py_FrozenMain is kept out of the Limited API until documented and present 6 in all builds of Python */ 7 PyAPI_FUNC(int) Py_FrozenMain(int argc, char **argv); 8 9 /* PEP 432 Multi-phase initialization API (Private while provisional!) */ 10 11 PyAPI_FUNC(PyStatus) Py_PreInitialize( 12 const PyPreConfig *src_config); 13 PyAPI_FUNC(PyStatus) Py_PreInitializeFromBytesArgs( 14 const PyPreConfig *src_config, 15 Py_ssize_t argc, 16 char **argv); 17 PyAPI_FUNC(PyStatus) Py_PreInitializeFromArgs( 18 const PyPreConfig *src_config, 19 Py_ssize_t argc, 20 wchar_t **argv); 21 22 23 /* Initialization and finalization */ 24 25 PyAPI_FUNC(PyStatus) Py_InitializeFromConfig( 26 const PyConfig *config); 27 28 PyAPI_FUNC(int) Py_RunMain(void); 29 30 31 PyAPI_FUNC(void) _Py_NO_RETURN Py_ExitStatusException(PyStatus err); 32 33 PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *); 34 35 /* --- PyInterpreterConfig ------------------------------------ */ 36 37 #define PyInterpreterConfig_DEFAULT_GIL (0) 38 #define PyInterpreterConfig_SHARED_GIL (1) 39 #define PyInterpreterConfig_OWN_GIL (2) 40 41 typedef struct { 42 // XXX "allow_object_sharing"? "own_objects"? 43 int use_main_obmalloc; 44 int allow_fork; 45 int allow_exec; 46 int allow_threads; 47 int allow_daemon_threads; 48 int check_multi_interp_extensions; 49 int gil; 50 } PyInterpreterConfig; 51 52 #define _PyInterpreterConfig_INIT \ 53 { \ 54 .use_main_obmalloc = 0, \ 55 .allow_fork = 0, \ 56 .allow_exec = 0, \ 57 .allow_threads = 1, \ 58 .allow_daemon_threads = 0, \ 59 .check_multi_interp_extensions = 1, \ 60 .gil = PyInterpreterConfig_OWN_GIL, \ 61 } 62 63 // gh-117649: The free-threaded build does not currently support single-phase 64 // init extensions in subinterpreters. For now, we ensure that 65 // `check_multi_interp_extensions` is always `1`, even in the legacy config. 66 #ifdef Py_GIL_DISABLED 67 # define _PyInterpreterConfig_LEGACY_CHECK_MULTI_INTERP_EXTENSIONS 1 68 #else 69 # define _PyInterpreterConfig_LEGACY_CHECK_MULTI_INTERP_EXTENSIONS 0 70 #endif 71 72 #define _PyInterpreterConfig_LEGACY_INIT \ 73 { \ 74 .use_main_obmalloc = 1, \ 75 .allow_fork = 1, \ 76 .allow_exec = 1, \ 77 .allow_threads = 1, \ 78 .allow_daemon_threads = 1, \ 79 .check_multi_interp_extensions = _PyInterpreterConfig_LEGACY_CHECK_MULTI_INTERP_EXTENSIONS, \ 80 .gil = PyInterpreterConfig_SHARED_GIL, \ 81 } 82 83 PyAPI_FUNC(PyStatus) Py_NewInterpreterFromConfig( 84 PyThreadState **tstate_p, 85 const PyInterpreterConfig *config); 86 87 typedef void (*atexit_datacallbackfunc)(void *); 88 PyAPI_FUNC(int) PyUnstable_AtExit( 89 PyInterpreterState *, atexit_datacallbackfunc, void *);