mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-99204: Calculate base_executable by alternate names in POSIX venvs (GH-99206)
Check to see if `base_executable` exists. If it does not, attempt to use known alternative names of the python binary to find an executable in the path specified by `home`. If no alternative is found, previous behavior is preserved. Signed-off-by: Vincent Fazio <vfazio@gmail.com> Signed-off-by: Vincent Fazio <vfazio@gmail.com>
This commit is contained in:
parent
f1680c3fbf
commit
c41b13d39c
3 changed files with 54 additions and 0 deletions
|
@ -375,6 +375,25 @@ if not home and not py_setpath:
|
|||
pass
|
||||
if not base_executable:
|
||||
base_executable = joinpath(executable_dir, basename(executable))
|
||||
# It's possible "python" is executed from within a posix venv but that
|
||||
# "python" is not available in the "home" directory as the standard
|
||||
# `make install` does not create it and distros often do not provide it.
|
||||
#
|
||||
# In this case, try to fall back to known alternatives
|
||||
if os_name != 'nt' and not isfile(base_executable):
|
||||
base_exe = basename(executable)
|
||||
for candidate in (DEFAULT_PROGRAM_NAME, f'python{VERSION_MAJOR}.{VERSION_MINOR}'):
|
||||
candidate += EXE_SUFFIX if EXE_SUFFIX else ''
|
||||
if base_exe == candidate:
|
||||
continue
|
||||
candidate = joinpath(executable_dir, candidate)
|
||||
# Only set base_executable if the candidate exists.
|
||||
# If no candidate succeeds, subsequent errors related to
|
||||
# base_executable (like FileNotFoundError) remain in the
|
||||
# context of the original executable name
|
||||
if isfile(candidate):
|
||||
base_executable = candidate
|
||||
break
|
||||
break
|
||||
else:
|
||||
venv_prefix = None
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue