aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--Doc/c-api/init.rst19
-rw-r--r--Doc/c-api/sys.rst3
-rw-r--r--Doc/whatsnew/3.13.rst14
-rw-r--r--Include/pylifecycle.h12
-rw-r--r--Include/sysmodule.h2
-rw-r--r--Misc/NEWS.d/next/C API/2023-06-01-09-40-30.gh-issue-105145.WOOE-w.rst11
-rw-r--r--Modules/_tkinter.c8
7 files changed, 57 insertions, 12 deletions
diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst
index dfb381953dd..1dab0af2659 100644
--- a/Doc/c-api/init.rst
+++ b/Doc/c-api/init.rst
@@ -429,6 +429,9 @@ Process-wide parameters
.. versionchanged:: 3.10
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
+ .. deprecated-removed:: 3.13 3.15
+ Get :data:`sys.executable` instead.
+
.. c:function:: wchar_t* Py_GetPrefix()
@@ -448,6 +451,9 @@ Process-wide parameters
.. versionchanged:: 3.10
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
+ .. deprecated-removed:: 3.13 3.15
+ Get :data:`sys.prefix` instead.
+
.. c:function:: wchar_t* Py_GetExecPrefix()
@@ -489,6 +495,9 @@ Process-wide parameters
.. versionchanged:: 3.10
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
+ .. deprecated-removed:: 3.13 3.15
+ Get :data:`sys.exec_prefix` instead.
+
.. c:function:: wchar_t* Py_GetProgramFullPath()
@@ -507,6 +516,9 @@ Process-wide parameters
.. versionchanged:: 3.10
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
+ .. deprecated-removed:: 3.13 3.15
+ Get :data:`sys.executable` instead.
+
.. c:function:: wchar_t* Py_GetPath()
@@ -532,6 +544,9 @@ Process-wide parameters
.. versionchanged:: 3.10
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
+ .. deprecated-removed:: 3.13 3.15
+ Get :data:`sys.path` instead.
+
.. c:function:: const char* Py_GetVersion()
@@ -615,6 +630,10 @@ Process-wide parameters
.. versionchanged:: 3.10
It now returns ``NULL`` if called before :c:func:`Py_Initialize`.
+ .. deprecated-removed:: 3.13 3.15
+ Get :c:member:`PyConfig.home` or :envvar:`PYTHONHOME` environment
+ variable instead.
+
.. _threads:
diff --git a/Doc/c-api/sys.rst b/Doc/c-api/sys.rst
index ad6005b7c7a..c4077b2a562 100644
--- a/Doc/c-api/sys.rst
+++ b/Doc/c-api/sys.rst
@@ -237,6 +237,9 @@ accessible to C code. They all work with the current interpreter thread's
Reset :data:`sys.warnoptions` to an empty list. This function may be
called prior to :c:func:`Py_Initialize`.
+ .. deprecated-removed:: 3.13 3.15
+ Clear :data:`sys.warnoptions` and :data:`!warnings.filters` instead.
+
.. c:function:: void PySys_WriteStdout(const char *format, ...)
Write the output string described by *format* to :data:`sys.stdout`. No
diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst
index f3ded6ae34e..8427bda514b 100644
--- a/Doc/whatsnew/3.13.rst
+++ b/Doc/whatsnew/3.13.rst
@@ -357,6 +357,20 @@ Deprecated
``PY_UNICODE_TYPE`` are just aliases to ``wchar_t``.
(Contributed by Victor Stinner in :gh:`105156`.)
+* Deprecate old Python initialization functions:
+
+ * :c:func:`PySys_ResetWarnOptions`:
+ clear :data:`sys.warnoptions` and :data:`!warnings.filters` instead.
+ * :c:func:`Py_GetExecPrefix`: get :data:`sys.exec_prefix` instead.
+ * :c:func:`Py_GetPath`: get :data:`sys.path` instead.
+ * :c:func:`Py_GetPrefix`: get :data:`sys.prefix` instead.
+ * :c:func:`Py_GetProgramFullPath`: get :data:`sys.executable` instead.
+ * :c:func:`Py_GetProgramName`: get :data:`sys.executable` instead.
+ * :c:func:`Py_GetPythonHome`: get :c:member:`PyConfig.home` or
+ :envvar:`PYTHONHOME` environment variable instead.
+
+ (Contributed by Victor Stinner in :gh:`105145`.)
+
Removed
-------
diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h
index 0190b4c3f5d..34f32a5000e 100644
--- a/Include/pylifecycle.h
+++ b/Include/pylifecycle.h
@@ -34,12 +34,12 @@ PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv);
PyAPI_FUNC(int) Py_BytesMain(int argc, char **argv);
/* In pathconfig.c */
-PyAPI_FUNC(wchar_t *) Py_GetProgramName(void);
-PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void);
-PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void);
-PyAPI_FUNC(wchar_t *) Py_GetPrefix(void);
-PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void);
-PyAPI_FUNC(wchar_t *) Py_GetPath(void);
+Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetProgramName(void);
+Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void);
+Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void);
+Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetPrefix(void);
+Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void);
+Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetPath(void);
#ifdef MS_WINDOWS
int _Py_CheckPython3(void);
#endif
diff --git a/Include/sysmodule.h b/Include/sysmodule.h
index 5fd21f5fa30..225e0602d19 100644
--- a/Include/sysmodule.h
+++ b/Include/sysmodule.h
@@ -17,7 +17,7 @@ PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...)
PyAPI_FUNC(void) PySys_FormatStdout(const char *format, ...);
PyAPI_FUNC(void) PySys_FormatStderr(const char *format, ...);
-PyAPI_FUNC(void) PySys_ResetWarnOptions(void);
+Py_DEPRECATED(3.13) PyAPI_FUNC(void) PySys_ResetWarnOptions(void);
PyAPI_FUNC(PyObject *) PySys_GetXOptions(void);
diff --git a/Misc/NEWS.d/next/C API/2023-06-01-09-40-30.gh-issue-105145.WOOE-w.rst b/Misc/NEWS.d/next/C API/2023-06-01-09-40-30.gh-issue-105145.WOOE-w.rst
new file mode 100644
index 00000000000..13dff769908
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2023-06-01-09-40-30.gh-issue-105145.WOOE-w.rst
@@ -0,0 +1,11 @@
+Deprecate old Python initialization functions:
+
+* :c:func:`PySys_ResetWarnOptions`
+* :c:func:`Py_GetExecPrefix`
+* :c:func:`Py_GetPath`
+* :c:func:`Py_GetPrefix`
+* :c:func:`Py_GetProgramFullPath`
+* :c:func:`Py_GetProgramName`
+* :c:func:`Py_GetPythonHome`
+
+Patch by Victor Stinner.
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 49c94447c72..f06e624d4d5 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -130,11 +130,10 @@ _get_tcl_lib_path(void)
static int already_checked = 0;
if (already_checked == 0) {
- PyObject *prefix;
struct stat stat_buf;
int stat_return_value;
- prefix = PyUnicode_FromWideChar(Py_GetPrefix(), -1);
+ PyObject *prefix = PySys_GetObject("prefix"); // borrowed reference
if (prefix == NULL) {
return NULL;
}
@@ -3289,8 +3288,8 @@ PyInit__tkinter(void)
/* This helps the dynamic loader; in Unicode aware Tcl versions
it also helps Tcl find its encodings. */
- uexe = PyUnicode_FromWideChar(Py_GetProgramName(), -1);
- if (uexe) {
+ uexe = PySys_GetObject("executable"); // borrowed reference
+ if (uexe && PyUnicode_Check(uexe)) { // sys.executable can be None
cexe = PyUnicode_EncodeFSDefault(uexe);
if (cexe) {
#ifdef MS_WINDOWS
@@ -3329,7 +3328,6 @@ PyInit__tkinter(void)
#endif /* MS_WINDOWS */
}
Py_XDECREF(cexe);
- Py_DECREF(uexe);
}
if (PyErr_Occurred()) {