summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-04-25 04:15:47 -0700
committerVictor Stinner <vstinner@redhat.com>2019-04-25 13:15:47 +0200
commit3076a3e0d1c54a2a6cc54c84521cd0f640d7cffb (patch)
tree3ecef397394051fc651b373b90e886efbb702f04
parent4d0233ec656bc7e7814e5f6f484e79a50a0daf91 (diff)
downloadcpython-git-3076a3e0d1c54a2a6cc54c84521cd0f640d7cffb.tar.gz
bpo-28552: Fix distutils.sysconfig for empty sys.executable (GH-12875) (GH-12948)
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). (cherry picked from commit 0ef8c157e9195df0115c54ba875a5efb92ac22fb) Co-authored-by: Victor Stinner <vstinner@redhat.com>
-rw-r--r--Lib/distutils/command/build.py2
-rw-r--r--Lib/distutils/sysconfig.py7
-rw-r--r--Misc/NEWS.d/next/Library/2019-04-18-16-10-29.bpo-28552.MW1TLt.rst4
3 files changed, 11 insertions, 2 deletions
diff --git a/Lib/distutils/command/build.py b/Lib/distutils/command/build.py
index c6f52e61e1..a86df0bc7f 100644
--- a/Lib/distutils/command/build.py
+++ b/Lib/distutils/command/build.py
@@ -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):
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index f803a1d13a..0a034ee09b 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -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
index 0000000000..2aa30c98c4
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-04-18-16-10-29.bpo-28552.MW1TLt.rst
@@ -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.