7
7
Initialization, Finalization, and Threads
8
8
*****************************************
9
9
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.
11
12
12
13
.. _pre-init-safe :
13
14
@@ -21,6 +22,15 @@ a few functions and the :ref:`global configuration variables
21
22
22
23
The following functions can be safely called before Python is initialized:
23
24
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
+
24
34
* Configuration functions:
25
35
26
36
* :c:func: `PyImport_AppendInittab `
@@ -32,6 +42,7 @@ The following functions can be safely called before Python is initialized:
32
42
* :c:func: `Py_SetProgramName `
33
43
* :c:func: `Py_SetPythonHome `
34
44
* :c:func: `PySys_ResetWarnOptions `
45
+ * the configuration functions covered in :ref: `init-config `
35
46
36
47
* Informative functions:
37
48
@@ -43,10 +54,12 @@ The following functions can be safely called before Python is initialized:
43
54
* :c:func: `Py_GetCopyright `
44
55
* :c:func: `Py_GetPlatform `
45
56
* :c:func: `Py_GetVersion `
57
+ * :c:func: `Py_IsInitialized `
46
58
47
59
* Utilities:
48
60
49
61
* :c:func: `Py_DecodeLocale `
62
+ * the status reporting and utility functions covered in :ref: `init-config `
50
63
51
64
* Memory allocators:
52
65
@@ -62,11 +75,13 @@ The following functions can be safely called before Python is initialized:
62
75
63
76
.. note ::
64
77
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 `,
67
81
:c:func: `Py_GetPrefix `, :c:func: `Py_GetExecPrefix `,
68
82
: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 `.
70
85
71
86
72
87
.. _global-conf-vars :
@@ -346,34 +361,42 @@ Initializing and finalizing the interpreter
346
361
this should be called before using any other Python/C API functions; see
347
362
:ref: `Before Python Initialization <pre-init-safe >` for the few exceptions.
348
363
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
360
373
:ref: `Python Initialization Configuration <init-config >`.
361
374
362
375
.. 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.
365
378
366
379
367
380
.. c :function :: void Py_InitializeEx (int initsigs)
368
381
369
382
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 .
372
385
373
- Use the :c:func:`Py_InitializeFromConfig` function to customize the
386
+ Use :c:func:`Py_InitializeFromConfig` to customize the
374
387
:ref:`Python Initialization Configuration <init-config>`.
375
388
376
389
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
+
377
400
.. c :function :: int Py_IsInitialized ()
378
401
379
402
Return true (nonzero) when the Python interpreter has been initialized, false
@@ -440,12 +463,111 @@ Initializing and finalizing the interpreter
440
463
441
464
.. versionadded :: 3.6
442
465
466
+
443
467
.. c :function :: void Py_Finalize ()
444
468
445
469
This is a backwards-compatible version of :c:func:`Py_FinalizeEx` that
446
470
disregards the return value.
447
471
448
472
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
+
449
571
Process-wide parameters
450
572
=======================
451
573
0 commit comments