Description
Bug report
Bug description:
The current getpath.py
code tries determining base_prefix
/base_exec_prefix
by searching the location of the libpython
library loaded in the current process, falling back to the location of the Python interpreter executable.
Lines 559 to 594 in 7900a85
Looking at the location of the libpython
library in use first makes sense, as that is more reliable than looking at interpreter location — it works when embedding, where there isn't any interpreter executable, it works when the executable is not on base_prefix
, etc. However, this is only currently supported on Windows and macOS framework builds.
Lines 802 to 837 in 7b8bd3b
The spotty platform support stroke me as odd, especially on macOS, as I see no apparent reason for only supporting framework builds, so I looked traced back the origin of this code.
The macOS logic goes back to Python 2.0, having been introduced in 54ecc3d. At this time, we were determining base_prefix
/base_exec_prefix
based on the Python interpreter location, which was problematic on OS X Frameworks, as the Python interpreter is provided via a launcher. The comment traces back to 55070f5 and is unrelated to the change made by that commit, it just highlights the special case for macOS framework builds.
In GH-29041, which introduced getpath.py
, rewriting the old path initialization C code in Python, the logic changed to purposefully search the libpython
location before the executable location, also adding Windows support. I imagine the existing macOS code was kept as-is as a mistake, leaving it behind the WITH_NEXT_FRAMEWORK
flag, maybe under the assumption it was needed for some reason.
Considering the clear intent in the code, I am treating this a bug.
cc @zooba
CPython versions tested on:
CPython main branch
Operating systems tested on:
No response