summaryrefslogtreecommitdiffstats
path: root/Modules/getpath.py
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/getpath.py')
-rw-r--r--Modules/getpath.py24
1 files changed, 14 insertions, 10 deletions
diff --git a/Modules/getpath.py b/Modules/getpath.py
index 1410ffd..bc70532 100644
--- a/Modules/getpath.py
+++ b/Modules/getpath.py
@@ -310,7 +310,10 @@ if ENV_PYTHONEXECUTABLE or ENV___PYVENV_LAUNCHER__:
# and should not affect base_executable.
base_executable = f"{dirname(library)}/bin/python{VERSION_MAJOR}.{VERSION_MINOR}"
else:
- base_executable = executable
+ # Use the real executable as our base, or argv[0] otherwise
+ # (on Windows, argv[0] is likely to be ENV___PYVENV_LAUNCHER__; on
+ # other platforms, real_executable is likely to be empty)
+ base_executable = real_executable or executable
if not real_executable:
real_executable = base_executable
@@ -408,13 +411,14 @@ if not base_executable:
if not real_executable:
real_executable = base_executable
-try:
- real_executable = realpath(real_executable)
-except OSError as ex:
- # Only warn if the file actually exists and was unresolvable
- # Otherwise users who specify a fake executable may get spurious warnings.
- if isfile(real_executable):
- warn(f'Failed to find real location of {base_executable}')
+if real_executable:
+ try:
+ real_executable = realpath(real_executable)
+ except OSError as ex:
+ # Only warn if the file actually exists and was unresolvable
+ # Otherwise users who specify a fake executable may get spurious warnings.
+ if isfile(real_executable):
+ warn(f'Failed to find real location of {base_executable}')
if not executable_dir and os_name == 'darwin' and library:
# QUIRK: macOS checks adjacent to its library early
@@ -427,12 +431,12 @@ if not executable_dir and os_name == 'darwin' and library:
# If we do not have the executable's directory, we can calculate it.
# This is the directory used to find prefix/exec_prefix if necessary.
-if not executable_dir:
+if not executable_dir and real_executable:
executable_dir = real_executable_dir = dirname(real_executable)
# If we do not have the real executable's directory, we calculate it.
# This is the directory used to detect build layouts.
-if not real_executable_dir:
+if not real_executable_dir and real_executable:
real_executable_dir = dirname(real_executable)
# ******************************************************************************