bpo-28552: Fix distutils.sysconfig for empty sys.executable (GH-12875)
authorVictor Stinner <vstinner@redhat.com>
Thu, 25 Apr 2019 09:59:34 +0000 (11:59 +0200)
committerGitHub <noreply@github.com>
Thu, 25 Apr 2019 09:59:34 +0000 (11:59 +0200)
bpo-28552, bpo-7774: Fix distutils.sysconfig if sys.executable is
None or an empty string: use os.getcwd() to initialize project_base.

Fix also the distutils build command: don't use sys.executable if
it's evaluated as false (None or empty string).

Lib/distutils/command/build.py
Lib/distutils/sysconfig.py
Misc/NEWS.d/next/Library/2019-04-18-16-10-29.bpo-28552.MW1TLt.rst [new file with mode: 0644]

index c6f52e61e1bc705fa46d81336eb34897e33a0074..a86df0bc7f921889bc0b28eeee6600a9bab41ebc 100644 (file)
@@ -116,7 +116,7 @@ class build(Command):
             self.build_scripts = os.path.join(self.build_base,
                                               'scripts-%d.%d' % sys.version_info[:2])
 
-        if self.executable is None:
+        if self.executable is None and sys.executable:
             self.executable = os.path.normpath(sys.executable)
 
         if isinstance(self.parallel, str):
index a3494670db18c1a7f43f4122ef14774bb5bf2fcb..570a612d1b1029ba5390a8bd42492dc5c09284b0 100644 (file)
@@ -28,7 +28,12 @@ BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix)
 if "_PYTHON_PROJECT_BASE" in os.environ:
     project_base = os.path.abspath(os.environ["_PYTHON_PROJECT_BASE"])
 else:
-    project_base = os.path.dirname(os.path.abspath(sys.executable))
+    if sys.executable:
+        project_base = os.path.dirname(os.path.abspath(sys.executable))
+    else:
+        # sys.executable can be empty if argv[0] has been changed and Python is
+        # unable to retrieve the real program name
+        project_base = os.getcwd()
 
 
 # python_build: (Boolean) if true, we're either building Python or
diff --git a/Misc/NEWS.d/next/Library/2019-04-18-16-10-29.bpo-28552.MW1TLt.rst b/Misc/NEWS.d/next/Library/2019-04-18-16-10-29.bpo-28552.MW1TLt.rst
new file mode 100644 (file)
index 0000000..2aa30c9
--- /dev/null
@@ -0,0 +1,4 @@
+Fix :mod:`distutils.sysconfig` if :data:`sys.executable` is ``None`` or an
+empty string: use :func:`os.getcwd` to initialize ``project_base``.  Fix
+also the distutils build command: don't use :data:`sys.executable` if it is
+``None`` or an empty string.