77Initialization, Finalization, and Threads
88*****************************************
99
10- See also the :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
@@ -440,12 +463,111 @@ Initializing and finalizing the interpreter
440463
441464 .. versionadded :: 3.6
442465
466+
443467.. c :function :: void Py_Finalize ()
444468
445469 This is a backwards-compatible version of :c:func:`Py_FinalizeEx` that
446470 disregards the return value.
447471
448472
473+ .. c:function:: int Py_BytesMain(int argc, char **argv)
474+
475+ Similar to :c:func: `Py_Main ` but *argv * is an array of bytes strings,
476+ allowing the calling application to delegate the text decoding step to
477+ the CPython runtime.
478+
479+ .. versionadded :: 3.8
480+
481+
482+ .. c :function :: int Py_Main (int argc, wchar_t **argv)
483+
484+ The main program for the standard interpreter, encapsulating a full
485+ initialization/finalization cycle, as well as additional
486+ behaviour to implement reading configurations settings from the environment
487+ and command line, and then executing ``__main__ `` in accordance with
488+ :ref: `using-on-cmdline `.
489+
490+ This is made available for programs which wish to support the full CPython
491+ command line interface, rather than just embedding a Python runtime in a
492+ larger application.
493+
494+ The *argc * and *argv * parameters are similar to those which are passed to a
495+ C program's :c:func: `main ` function, except that the *argv * entries are first
496+ converted to ``wchar_t `` using :c:func: `Py_DecodeLocale `. It is also
497+ important to note that the argument list entries may be modified to point to
498+ strings other than those passed in (however, the contents of the strings
499+ pointed to by the argument list are not modified).
500+
501+ The return value will be ``0`` if the interpreter exits normally (i.e.,
502+ without an exception), ``1`` if the interpreter exits due to an exception,
503+ or ``2`` if the argument list does not represent a valid Python command
504+ line.
505+
506+ Note that if an otherwise unhandled :exc:`SystemExit` is raised, this
507+ function will not return ``1``, but exit the process, as long as
508+ ``Py_InspectFlag`` is not set. If ``Py_InspectFlag`` is set, execution will
509+ drop into the interactive Python prompt, at which point a second otherwise
510+ unhandled :exc:`SystemExit` will still exit the process, while any other
511+ means of exiting will set the return value as described above.
512+
513+ In terms of the CPython runtime configuration APIs documented in the
514+ :ref:`runtime configuration <init-config>` section (and without accounting
515+ for error handling), ``Py_Main `` is approximately equivalent to::
516+
517+ PyConfig config;
518+ PyConfig_InitPythonConfig(&config);
519+ PyConfig_SetArgv(&config, argc, argv);
520+ Py_InitializeFromConfig(&config);
521+ PyConfig_Clear(&config);
522+
523+ Py_RunMain();
524+
525+ In normal usage, an embedding application will call this function
526+ *instead * of calling :c:func: `Py_Initialize `, :c:func: `Py_InitializeEx ` or
527+ :c:func: `Py_InitializeFromConfig ` directly, and all settings will be applied
528+ as described elsewhere in this documentation. If this function is instead
529+ called *after * a preceding runtime initialization API call, then exactly
530+ which environmental and command line configuration settings will be updated
531+ is version dependent (as it depends on which settings correctly support
532+ being modified after they have already been set once when the runtime was
533+ first initialized).
534+
535+
536+ .. c:function:: int Py_RunMain(void)
537+
538+ Executes the main module in a fully configured CPython runtime.
539+
540+ Executes the command (:c:member: `PyConfig.run_command `), the script
541+ (:c:member: `PyConfig.run_filename `) or the module
542+ (:c:member: `PyConfig.run_module `) specified on the command line or in the
543+ configuration. If none of these values are set, runs the interactive Python
544+ prompt (REPL) using the ``__main__`` module's global namespace.
545+
546+ If :c:member:`PyConfig.inspect` is not set (the default), the return value
547+ will be ``0`` if the interpreter exits normally (that is, without raising
548+ an exception), or ``1`` if the interpreter exits due to an exception. If an
549+ otherwise unhandled :exc:`SystemExit` is raised, the function will immediately
550+ exit the process instead of returning ``1``.
551+
552+ If :c:member:`PyConfig.inspect` is set (such as when the :option: `-i ` option
553+ is used), rather than returning when the interpreter exits, execution will
554+ instead resume in an interactive Python prompt (REPL) using the ``__main__``
555+ module's global namespace. If the interpreter exited with an exception, it
556+ is immediately raised in the REPL session. The function return value is
557+ then determined by the way the *REPL session* terminates: returning ``0``
558+ if the session terminates without raising an unhandled exception, exiting
559+ immediately for an unhandled :exc:`SystemExit`, and returning ``1`` for
560+ any other unhandled exception.
561+
562+ This function always finalizes the Python interpreter regardless of whether
563+ it returns a value or immediately exits the process due to an unhandled
564+ :exc:`SystemExit` exception.
565+
566+ See :ref:`Python Configuration <init-python-config>` for an example of a
567+ customized Python that always runs in isolated mode using
568+ :c:func:`Py_RunMain`.
569+
570+
449571Process-wide parameters
450572=======================
451573
0 commit comments