7
7
Initialization, Finalization, and Threads
8
8
*****************************************
9
9
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.
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
@@ -430,12 +453,111 @@ Initializing and finalizing the interpreter
430
453
431
454
.. versionadded :: 3.6
432
455
456
+
433
457
.. c :function :: void Py_Finalize ()
434
458
435
459
This is a backwards-compatible version of :c:func:`Py_FinalizeEx` that
436
460
disregards the return value.
437
461
438
462
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
+
439
561
Process-wide parameters
440
562
=======================
441
563
0 commit comments