Commit f4edd390 authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

bpo-28552: Fix distutils.sysconfig for empty sys.executable (GH-12875) (GH-12949)

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).
parent 84efbaec
...@@ -114,7 +114,7 @@ class build(Command): ...@@ -114,7 +114,7 @@ class build(Command):
self.build_scripts = os.path.join(self.build_base, self.build_scripts = os.path.join(self.build_base,
'scripts-' + sys.version[0:3]) 'scripts-' + sys.version[0:3])
if self.executable is None: if self.executable is None and sys.executable:
self.executable = os.path.normpath(sys.executable) self.executable = os.path.normpath(sys.executable)
def run(self): def run(self):
......
...@@ -25,7 +25,12 @@ EXEC_PREFIX = os.path.normpath(sys.exec_prefix) ...@@ -25,7 +25,12 @@ EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
# Path to the base directory of the project. On Windows the binary may # Path to the base directory of the project. On Windows the binary may
# live in project/PCBuild9. If we're dealing with an x64 Windows build, # live in project/PCBuild9. If we're dealing with an x64 Windows build,
# it'll live in project/PCbuild/amd64. # it'll live in project/PCbuild/amd64.
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()
if os.name == "nt" and "pcbuild" in project_base[-8:].lower(): if os.name == "nt" and "pcbuild" in project_base[-8:].lower():
project_base = os.path.abspath(os.path.join(project_base, os.path.pardir)) project_base = os.path.abspath(os.path.join(project_base, os.path.pardir))
# PC/VS7.1 # PC/VS7.1
...@@ -79,7 +84,12 @@ def get_python_inc(plat_specific=0, prefix=None): ...@@ -79,7 +84,12 @@ def get_python_inc(plat_specific=0, prefix=None):
if os.name == "posix": if os.name == "posix":
if python_build: if python_build:
if sys.executable:
buildir = os.path.dirname(sys.executable) buildir = os.path.dirname(sys.executable)
else:
# sys.executable can be empty if argv[0] has been changed
# and Python is unable to retrieve the real program name
buildir = os.getcwd()
if plat_specific: if plat_specific:
# python.h is located in the buildir # python.h is located in the buildir
inc_dir = buildir inc_dir = buildir
......
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.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment