77Initialization, Finalization, and Threads
88*****************************************
99
10- See also :ref: `Python Initialization Configuration <init-config >`.
10+ See :ref: `Python Initialization Configuration <init-config >` for details
11+ on how to configure the interpreter prior to initialization.
1112
1213.. _pre-init-safe :
1314
@@ -21,6 +22,15 @@ a few functions and the :ref:`global configuration variables
2122
2223The following functions can be safely called before Python is initialized:
2324
25+ * Functions that initialize the interpreter:
26+
27+ * :c:func: `Py_Initialize `
28+ * :c:func: `Py_InitializeEx `
29+ * :c:func: `Py_InitializeFromConfig `
30+ * :c:func: `Py_BytesMain `
31+ * :c:func: `Py_Main `
32+ * the runtime pre-initialization functions covered in :ref: `init-config `
33+
2434* Configuration functions:
2535
2636 * :c:func: `PyImport_AppendInittab `
@@ -32,6 +42,7 @@ The following functions can be safely called before Python is initialized:
3242 * :c:func: `Py_SetProgramName `
3343 * :c:func: `Py_SetPythonHome `
3444 * :c:func: `PySys_ResetWarnOptions `
45+ * the configuration functions covered in :ref: `init-config `
3546
3647* Informative functions:
3748
@@ -43,10 +54,12 @@ The following functions can be safely called before Python is initialized:
4354 * :c:func: `Py_GetCopyright `
4455 * :c:func: `Py_GetPlatform `
4556 * :c:func: `Py_GetVersion `
57+ * :c:func: `Py_IsInitialized `
4658
4759* Utilities:
4860
4961 * :c:func: `Py_DecodeLocale `
62+ * the status reporting and utility functions covered in :ref: `init-config `
5063
5164* Memory allocators:
5265
@@ -62,11 +75,13 @@ The following functions can be safely called before Python is initialized:
6275
6376.. note ::
6477
65- The following functions **should not be called ** before
66- :c:func: `Py_Initialize `: :c:func: `Py_EncodeLocale `, :c:func: `Py_GetPath `,
78+ Despite their apparent similarity to some of the functions listed above,
79+ the following functions **should not be called ** before the interpreter has
80+ been initialized: :c:func: `Py_EncodeLocale `, :c:func: `Py_GetPath `,
6781 :c:func: `Py_GetPrefix `, :c:func: `Py_GetExecPrefix `,
6882 :c:func: `Py_GetProgramFullPath `, :c:func: `Py_GetPythonHome `,
69- :c:func: `Py_GetProgramName ` and :c:func: `PyEval_InitThreads `.
83+ :c:func: `Py_GetProgramName `, :c:func: `PyEval_InitThreads `, and
84+ :c:func: `Py_RunMain `.
7085
7186
7287.. _global-conf-vars :
@@ -346,34 +361,42 @@ Initializing and finalizing the interpreter
346361 this should be called before using any other Python/C API functions; see
347362 :ref: `Before Python Initialization <pre-init-safe >` for the few exceptions.
348363
349- This initializes
350- the table of loaded modules (``sys.modules ``), and creates the fundamental
351- modules :mod: `builtins `, :mod: `__main__ ` and :mod: `sys `. It also initializes
352- the module search path (``sys.path ``). It does not set ``sys.argv ``; use
353- the new :c:type: `PyConfig ` API of the :ref: `Python Initialization
354- Configuration <init-config>` for that. This is a no-op when called for a
355- second time
356- (without calling :c:func: `Py_FinalizeEx ` first). There is no return value; it is a
357- fatal error if the initialization fails.
358-
359- Use the :c:func: `Py_InitializeFromConfig ` function to customize the
364+ This initializes the table of loaded modules (``sys.modules ``), and creates
365+ the fundamental modules :mod: `builtins `, :mod: `__main__ ` and :mod: `sys `.
366+ It also initializes the module search path (``sys.path ``). It does not set
367+ ``sys.argv ``; use the :ref: `Python Initialization Configuration <init-config >`
368+ API for that. This is a no-op when called for a second time (without calling
369+ :c:func: `Py_FinalizeEx ` first). There is no return value; it is a fatal
370+ error if the initialization fails.
371+
372+ Use :c:func: `Py_InitializeFromConfig ` to customize the
360373 :ref: `Python Initialization Configuration <init-config >`.
361374
362375 .. note ::
363- On Windows, changes the console mode from ``O_TEXT `` to ``O_BINARY ``, which will
364- also affect non-Python uses of the console using the C Runtime.
376+ On Windows, changes the console mode from ``O_TEXT `` to ``O_BINARY ``,
377+ which will also affect non-Python uses of the console using the C Runtime.
365378
366379
367380.. c :function :: void Py_InitializeEx (int initsigs)
368381
369382 This function works like :c:func:`Py_Initialize` if *initsigs* is ``1``. If
370- *initsigs* is ``0``, it skips initialization registration of signal handlers, which
371- might be useful when Python is embedded.
383+ *initsigs* is ``0``, it skips initialization registration of signal handlers,
384+ which may be useful when CPython is embedded as part of a larger application .
372385
373- Use the :c:func:`Py_InitializeFromConfig` function to customize the
386+ Use :c:func:`Py_InitializeFromConfig` to customize the
374387 :ref:`Python Initialization Configuration <init-config>`.
375388
376389
390+ .. c:function:: PyStatus Py_InitializeFromConfig(const PyConfig *config)
391+
392+ Initialize Python from *config * configuration, as described in
393+ :ref: `init-from-config `.
394+
395+ See the :ref: `init-config ` section for details on pre-initializing the
396+ interpreter, populating the runtime configuration structure, and querying
397+ the returned status structure.
398+
399+
377400.. c :function :: int Py_IsInitialized ()
378401
379402 Return true (nonzero) when the Python interpreter has been initialized, false
@@ -430,12 +453,111 @@ Initializing and finalizing the interpreter
430453
431454 .. versionadded :: 3.6
432455
456+
433457.. c :function :: void Py_Finalize ()
434458
435459 This is a backwards-compatible version of :c:func:`Py_FinalizeEx` that
436460 disregards the return value.
437461
438462
463+ .. c:function:: int Py_BytesMain(int argc, char **argv)
464+
465+ Similar to :c:func: `Py_Main ` but *argv * is an array of bytes strings,
466+ allowing the calling application to delegate the text decoding step to
467+ the CPython runtime.
468+
469+ .. versionadded :: 3.8
470+
471+
472+ .. c :function :: int Py_Main (int argc, wchar_t **argv)
473+
474+ The main program for the standard interpreter, encapsulating a full
475+ initialization/finalization cycle, as well as additional
476+ behaviour to implement reading configurations settings from the environment
477+ and command line, and then executing ``__main__ `` in accordance with
478+ :ref: `using-on-cmdline `.
479+
480+ This is made available for programs which wish to support the full CPython
481+ command line interface, rather than just embedding a Python runtime in a
482+ larger application.
483+
484+ The *argc * and *argv * parameters are similar to those which are passed to a
485+ C program's :c:func: `main ` function, except that the *argv * entries are first
486+ converted to ``wchar_t `` using :c:func: `Py_DecodeLocale `. It is also
487+ important to note that the argument list entries may be modified to point to
488+ strings other than those passed in (however, the contents of the strings
489+ pointed to by the argument list are not modified).
490+
491+ The return value will be ``0`` if the interpreter exits normally (i.e.,
492+ without an exception), ``1`` if the interpreter exits due to an exception,
493+ or ``2`` if the argument list does not represent a valid Python command
494+ line.
495+
496+ Note that if an otherwise unhandled :exc:`SystemExit` is raised, this
497+ function will not return ``1``, but exit the process, as long as
498+ ``Py_InspectFlag`` is not set. If ``Py_InspectFlag`` is set, execution will
499+ drop into the interactive Python prompt, at which point a second otherwise
500+ unhandled :exc:`SystemExit` will still exit the process, while any other
501+ means of exiting will set the return value as described above.
502+
503+ In terms of the CPython runtime configuration APIs documented in the
504+ :ref:`runtime configuration <init-config>` section (and without accounting
505+ for error handling), ``Py_Main `` is approximately equivalent to::
506+
507+ PyConfig config;
508+ PyConfig_InitPythonConfig(&config);
509+ PyConfig_SetArgv(&config, argc, argv);
510+ Py_InitializeFromConfig(&config);
511+ PyConfig_Clear(&config);
512+
513+ Py_RunMain();
514+
515+ In normal usage, an embedding application will call this function
516+ *instead * of calling :c:func: `Py_Initialize `, :c:func: `Py_InitializeEx ` or
517+ :c:func: `Py_InitializeFromConfig ` directly, and all settings will be applied
518+ as described elsewhere in this documentation. If this function is instead
519+ called *after * a preceding runtime initialization API call, then exactly
520+ which environmental and command line configuration settings will be updated
521+ is version dependent (as it depends on which settings correctly support
522+ being modified after they have already been set once when the runtime was
523+ first initialized).
524+
525+
526+ .. c:function:: int Py_RunMain(void)
527+
528+ Executes the main module in a fully configured CPython runtime.
529+
530+ Executes the command (:c:member: `PyConfig.run_command `), the script
531+ (:c:member: `PyConfig.run_filename `) or the module
532+ (:c:member: `PyConfig.run_module `) specified on the command line or in the
533+ configuration. If none of these values are set, runs the interactive Python
534+ prompt (REPL) using the ``__main__`` module's global namespace.
535+
536+ If :c:member:`PyConfig.inspect` is not set (the default), the return value
537+ will be ``0`` if the interpreter exits normally (that is, without raising
538+ an exception), or ``1`` if the interpreter exits due to an exception. If an
539+ otherwise unhandled :exc:`SystemExit` is raised, the function will immediately
540+ exit the process instead of returning ``1``.
541+
542+ If :c:member:`PyConfig.inspect` is set (such as when the :option: `-i ` option
543+ is used), rather than returning when the interpreter exits, execution will
544+ instead resume in an interactive Python prompt (REPL) using the ``__main__``
545+ module's global namespace. If the interpreter exited with an exception, it
546+ is immediately raised in the REPL session. The function return value is
547+ then determined by the way the *REPL session* terminates: returning ``0``
548+ if the session terminates without raising an unhandled exception, exiting
549+ immediately for an unhandled :exc:`SystemExit`, and returning ``1`` for
550+ any other unhandled exception.
551+
552+ This function always finalizes the Python interpreter regardless of whether
553+ it returns a value or immediately exits the process due to an unhandled
554+ :exc:`SystemExit` exception.
555+
556+ See :ref:`Python Configuration <init-python-config>` for an example of a
557+ customized Python that always runs in isolated mode using
558+ :c:func:`Py_RunMain`.
559+
560+
439561Process-wide parameters
440562=======================
441563
0 commit comments