[PATCH 1 of 5] python3.13: use sys.executable instead of removed Py_GetProgramFullPath
Manuel Jacob
me at manueljacob.de
Fri Feb 2 00:33:30 UTC 2024
On 12/01/2024 00.59, Mads Kiilerich wrote:
> # HG changeset patch
> # User Mads Kiilerich <mads at kiilerich.com>
> # Date 1705001527 -3600
> # Thu Jan 11 20:32:07 2024 +0100
> # Branch stable
> # Node ID ab3021e9b0012db64e5bdc70e3f5a36324925d8c
> # Parent 3f87e0d305cda6e66139a1969cd2cedd45477139
> python3.13: use sys.executable instead of removed Py_GetProgramFullPath
According to
https://docs.python.org/3.13/c-api/init.html#c.Py_GetProgramFullPath,
it’s only deprecated, but not removed. Do you have other information?
> I could not make it work with the PyConfig API from the extension. But fetching
> sys.executable seems to work fine and isn't that verbose.
I think the PyConfig struct memory is released after interpreter
initialization, so I think PyConfig is out of question anyway.
https://docs.python.org/3.13/c-api/init.html#c.Py_GetProgramFullPath
suggests sys.executable as the alternative, so feel to change the patch
description to be more bold. :)
> diff --git a/mercurial/cext/parsers.c b/mercurial/cext/parsers.c
> --- a/mercurial/cext/parsers.c
> +++ b/mercurial/cext/parsers.c
> @@ -1232,6 +1232,15 @@ static int check_python_version(void)
> * should only occur in unusual circumstances (e.g. if sys.hexversion
> * is manually set to an invalid value). */
> if ((hexversion == -1) || (hexversion >> 16 != PY_VERSION_HEX >> 16)) {
> + PyObject *sys = PyImport_ImportModule("sys"), *executable;
> + if (!sys) {
> + return -1;
> + }
> + executable = PyObject_GetAttrString(sys, "executable");
You could use PySys_GetObject().
> + Py_DECREF(sys);
> + if (!executable) {
> + return -1;
> + }
> PyErr_Format(PyExc_ImportError,
> "%s: The Mercurial extension "
> "modules were compiled with Python " PY_VERSION
> @@ -1240,7 +1249,8 @@ static int check_python_version(void)
> "sys.hexversion=%ld: "
> "Python %s\n at: %s",
> versionerrortext, hexversion, Py_GetVersion(),
> - Py_GetProgramFullPath());
> + PyUnicode_AsUTF8(executable));
> + Py_DECREF(executable);
> return -1;
> }
> return 0;
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at lists.mercurial-scm.org
> https://lists.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list