@@ -77,7 +77,10 @@ The following functions can be safely called before Python is initialized:
7777
7878 Despite their apparent similarity to some of the functions listed above,
7979 the following functions **should not be called ** before the interpreter has
80- been initialized: :c:func: `Py_EncodeLocale `, :c:func: `PyEval_InitThreads `, and
80+ been initialized: :c:func: `Py_EncodeLocale `, :c:func: `Py_GetPath `,
81+ :c:func: `Py_GetPrefix `, :c:func: `Py_GetExecPrefix `,
82+ :c:func: `Py_GetProgramFullPath `, :c:func: `Py_GetPythonHome `,
83+ :c:func: `Py_GetProgramName `, :c:func: `PyEval_InitThreads `, and
8184 :c:func: `Py_RunMain `.
8285
8386
@@ -142,6 +145,9 @@ to 1 and ``-bb`` sets :c:data:`Py_BytesWarningFlag` to 2.
142145 :c:member: `PyConfig.pathconfig_warnings ` should be used instead, see
143146 :ref: `Python Initialization Configuration <init-config >`.
144147
148+ Suppress error messages when calculating the module search path in
149+ :c:func: `Py_GetPath `.
150+
145151 Private flag used by ``_freeze_module `` and ``frozenmain `` programs.
146152
147153 .. deprecated-removed :: 3.12 3.15
@@ -197,7 +203,7 @@ to 1 and ``-bb`` sets :c:data:`Py_BytesWarningFlag` to 2.
197203
198204 Set by the :option: `-i ` option.
199205
200- .. deprecated-removed :: 3.12 3.15
206+ .. deprecated :: 3.12
201207
202208.. c :var :: int Py_IsolatedFlag
203209
@@ -580,6 +586,7 @@ Process-wide parameters
580586 .. index ::
581587 single: Py_Initialize()
582588 single: main()
589+ single: Py_GetPath()
583590
584591 This API is kept for backward compatibility: setting
585592 :c:member: `PyConfig.program_name ` should be used instead, see :ref: `Python
@@ -589,7 +596,7 @@ Process-wide parameters
589596 the first time, if it is called at all. It tells the interpreter the value
590597 of the ``argv[0] `` argument to the :c:func: `main ` function of the program
591598 (converted to wide characters).
592- This is used by some other functions below to find
599+ This is used by :c:func:`Py_GetPath` and some other functions below to find
593600 the Python run-time libraries relative to the interpreter executable. The
594601 default value is ``'python'``. The argument should point to a
595602 zero-terminated wide character string in static storage whose contents will not
@@ -602,6 +609,146 @@ Process-wide parameters
602609 .. deprecated-removed:: 3.11 3.15
603610
604611
612+ .. c:function:: wchar_t* Py_GetProgramName()
613+
614+ Return the program name set with :c:member:`PyConfig.program_name`, or the default.
615+ The returned string points into static storage; the caller should not modify its
616+ value.
617+
618+ This function should not be called before :c:func: `Py_Initialize `, otherwise
619+ it returns ``NULL ``.
620+
621+ .. versionchanged :: 3.10
622+ It now returns ``NULL `` if called before :c:func: `Py_Initialize `.
623+
624+ .. deprecated-removed :: 3.13 3.15
625+ Use :c:func: `PyConfig_Get("executable") <PyConfig_Get> `
626+ (:data: `sys.executable `) instead.
627+
628+
629+ .. c:function:: wchar_t* Py_GetPrefix()
630+
631+ Return the *prefix* for installed platform-independent files. This is derived
632+ through a number of complicated rules from the program name set with
633+ :c:member:`PyConfig.program_name` and some environment variables; for example, if the
634+ program name is ``'/usr/local/bin/python' ``, the prefix is ``'/usr/local' ``. The
635+ returned string points into static storage; the caller should not modify its
636+ value. This corresponds to the :makevar: `prefix ` variable in the top-level
637+ :file: `Makefile ` and the :option: `--prefix ` argument to the :program: `configure `
638+ script at build time. The value is available to Python code as ``sys.base_prefix ``.
639+ It is only useful on Unix. See also the next function.
640+
641+ This function should not be called before :c:func: `Py_Initialize `, otherwise
642+ it returns ``NULL ``.
643+
644+ .. versionchanged :: 3.10
645+ It now returns ``NULL `` if called before :c:func: `Py_Initialize `.
646+
647+ .. deprecated-removed :: 3.13 3.15
648+ Use :c:func: `PyConfig_Get("base_prefix") <PyConfig_Get> `
649+ (:data: `sys.base_prefix `) instead. Use :c:func:`PyConfig_Get("prefix")
650+ <PyConfig_Get>` (:data: `sys.prefix `) if :ref:`virtual environments
651+ <venv-def>` need to be handled.
652+
653+
654+ .. c:function:: wchar_t* Py_GetExecPrefix()
655+
656+ Return the *exec-prefix* for installed platform-*dependent* files. This is
657+ derived through a number of complicated rules from the program name set with
658+ :c:member:`PyConfig.program_name` and some environment variables; for example, if the
659+ program name is ``'/usr/local/bin/python' ``, the exec-prefix is
660+ ``'/usr/local' ``. The returned string points into static storage; the caller
661+ should not modify its value. This corresponds to the :makevar: `exec_prefix `
662+ variable in the top-level :file: `Makefile ` and the ``--exec-prefix ``
663+ argument to the :program: `configure ` script at build time. The value is
664+ available to Python code as ``sys.base_exec_prefix ``. It is only useful on
665+ Unix.
666+
667+ Background: The exec-prefix differs from the prefix when platform dependent
668+ files (such as executables and shared libraries) are installed in a different
669+ directory tree. In a typical installation, platform dependent files may be
670+ installed in the :file:`/usr/local/plat` subtree while platform independent may
671+ be installed in :file:`/usr/local`.
672+
673+ Generally speaking, a platform is a combination of hardware and software
674+ families, e.g. Sparc machines running the Solaris 2.x operating system are
675+ considered the same platform, but Intel machines running Solaris 2.x are another
676+ platform, and Intel machines running Linux are yet another platform. Different
677+ major revisions of the same operating system generally also form different
678+ platforms. Non-Unix operating systems are a different story; the installation
679+ strategies on those systems are so different that the prefix and exec-prefix are
680+ meaningless, and set to the empty string. Note that compiled Python bytecode
681+ files are platform independent (but not independent from the Python version by
682+ which they were compiled!).
683+
684+ System administrators will know how to configure the :program: `mount ` or
685+ :program: `automount ` programs to share :file: `/usr/local ` between platforms
686+ while having :file: `/usr/local/plat ` be a different filesystem for each
687+ platform.
688+
689+ This function should not be called before :c:func: `Py_Initialize `, otherwise
690+ it returns ``NULL ``.
691+
692+ .. versionchanged :: 3.10
693+ It now returns ``NULL `` if called before :c:func: `Py_Initialize `.
694+
695+ .. deprecated-removed :: 3.13 3.15
696+ Use :c:func: `PyConfig_Get("base_exec_prefix") <PyConfig_Get> `
697+ (:data: `sys.base_exec_prefix `) instead. Use
698+ :c:func: `PyConfig_Get("exec_prefix") <PyConfig_Get> `
699+ (:data: `sys.exec_prefix `) if :ref: `virtual environments <venv-def >` need
700+ to be handled.
701+
702+ .. c :function :: wchar_t * Py_GetProgramFullPath ()
703+
704+ .. index::
705+ single: executable (in module sys)
706+
707+ Return the full program name of the Python executable; this is computed as a
708+ side-effect of deriving the default module search path from the program name
709+ (set by :c:member: `PyConfig.program_name `). The returned string points into
710+ static storage; the caller should not modify its value. The value is available
711+ to Python code as ``sys.executable ``.
712+
713+ This function should not be called before :c:func: `Py_Initialize `, otherwise
714+ it returns ``NULL ``.
715+
716+ .. versionchanged :: 3.10
717+ It now returns ``NULL `` if called before :c:func: `Py_Initialize `.
718+
719+ .. deprecated-removed :: 3.13 3.15
720+ Use :c:func: `PyConfig_Get("executable") <PyConfig_Get> `
721+ (:data: `sys.executable `) instead.
722+
723+
724+ .. c :function :: wchar_t * Py_GetPath ()
725+
726+ .. index::
727+ triple: module; search; path
728+ single: path (in module sys)
729+
730+ Return the default module search path; this is computed from the program name
731+ (set by :c:member: `PyConfig.program_name `) and some environment variables.
732+ The returned string consists of a series of directory names separated by a
733+ platform dependent delimiter character. The delimiter character is ``':' ``
734+ on Unix and macOS, ``';' `` on Windows. The returned string points into
735+ static storage; the caller should not modify its value. The list
736+ :data: `sys.path ` is initialized with this value on interpreter startup; it
737+ can be (and usually is) modified later to change the search path for loading
738+ modules.
739+
740+ This function should not be called before :c:func: `Py_Initialize `, otherwise
741+ it returns ``NULL ``.
742+
743+ .. XXX should give the exact rules
744+
745+ .. versionchanged :: 3.10
746+ It now returns ``NULL `` if called before :c:func: `Py_Initialize `.
747+
748+ .. deprecated-removed :: 3.13 3.15
749+ Use :c:func: `PyConfig_Get("module_search_paths") <PyConfig_Get> `
750+ (:data: `sys.path `) instead.
751+
605752.. c :function :: const char * Py_GetVersion ()
606753
607754 Return the version of this Python interpreter. This is a string that looks
@@ -772,6 +919,23 @@ Process-wide parameters
772919 .. deprecated-removed:: 3.11 3.15
773920
774921
922+ .. c:function:: wchar_t* Py_GetPythonHome()
923+
924+ Return the default " home" , that is, the value set by
925+ :c:member:`PyConfig.home`, or the value of the :envvar:`PYTHONHOME`
926+ environment variable if it is set.
927+
928+ This function should not be called before :c:func:`Py_Initialize`, otherwise
929+ it returns ``NULL``.
930+
931+ .. versionchanged:: 3.10
932+ It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
933+
934+ .. deprecated-removed:: 3.13 3.15
935+ Use :c:func:`PyConfig_Get(" home" ) <PyConfig_Get>` or the
936+ :envvar:`PYTHONHOME` environment variable instead.
937+
938+
775939.. _threads:
776940
777941Thread State and the Global Interpreter Lock
0 commit comments