Fixes tests requiring extra environment values on Windows (GH-9462)
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
index 20252be..1b19298 100644
--- a/Lib/test/test_sysconfig.py
+++ b/Lib/test/test_sysconfig.py
@@ -235,21 +235,34 @@
def test_symlink(self):
# On Windows, the EXE needs to know where pythonXY.dll is at so we have
# to add the directory to the path.
+ env = None
if sys.platform == "win32":
- os.environ["PATH"] = "{};{}".format(
- os.path.dirname(sys.executable), os.environ["PATH"])
+ env = {k.upper(): os.environ[k] for k in os.environ}
+ env["PATH"] = "{};{}".format(
+ os.path.dirname(sys.executable), env.get("PATH", ""))
+ # Requires PYTHONHOME as well since we locate stdlib from the
+ # EXE path and not the DLL path (which should be fixed)
+ env["PYTHONHOME"] = os.path.dirname(sys.executable)
+ if sysconfig.is_python_build(True):
+ env["PYTHONPATH"] = os.path.dirname(os.__file__)
# Issue 7880
- def get(python):
+ def get(python, env=None):
cmd = [python, '-c',
'import sysconfig; print(sysconfig.get_platform())']
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE, env=os.environ)
- return p.communicate()
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE, env=env)
+ out, err = p.communicate()
+ if p.returncode:
+ print((out, err))
+ self.fail('Non-zero return code {0} (0x{0:08X})'
+ .format(p.returncode))
+ return out, err
real = os.path.realpath(sys.executable)
link = os.path.abspath(TESTFN)
os.symlink(real, link)
try:
- self.assertEqual(get(real), get(link))
+ self.assertEqual(get(real), get(link, env))
finally:
unlink(link)