Clear PYTHONHOME when using bundled python (#600)
Fixes: #598
diff --git a/emsdk b/emsdk
index eb24599..7772144 100755
--- a/emsdk
+++ b/emsdk
@@ -6,13 +6,31 @@
# Wrapper script that runs emsdk.py
+# First look for pre-built python (macos)
if [ -z "$EMSDK_PYTHON" ]; then
- # Look for python3 first. This is especially important on macOS (See:
- # https://github.com/emscripten-core/emsdk/pull/273)
- EMSDK_PYTHON=$(which python3 2> /dev/null)
- if [ $? != 0 ]; then
- EMSDK_PYTHON=python
+ PYTHON3=$(dirname $0)/python/3.7.4-2_64bit/bin/python3
+ if [ -e $PYTHON3 ]; then
+ EMSDK_PYTHON=$PYTHON3
+ # When using our bundled python we never want the users
+ # PYTHONHOME or PYTHONPATH
+ # https://github.com/emscripten-core/emsdk/issues/598
+ unset PYTHONHOME
+ unset PYTHONPATH
fi
fi
+# Look for `python3` first. This is especially important on macOS (See:
+# https://github.com/emscripten-core/emsdk/pull/273)
+if [ -z "$EMSDK_PYTHON" ]; then
+ PYTHON3=$(which python3 2> /dev/null)
+ if [ $? = 0 ]; then
+ EMSDK_PYTHON=$PYTHON3
+ fi
+fi
+
+# Finally fall back to just looking for `python` in PATH
+if [ -z "$EMSDK_PYTHON" ]; then
+ EMSDK_PYTHON=python
+fi
+
exec "$EMSDK_PYTHON" "$0.py" "$@"
diff --git a/emsdk.bat b/emsdk.bat
index c65f23e..4ba706e 100644
--- a/emsdk.bat
+++ b/emsdk.bat
@@ -6,41 +6,25 @@
if exist "%~dp0python\3.7.4-pywin32_64bit\python.exe" (
set EMSDK_PY="%~dp0python\3.7.4-pywin32_64bit\python.exe"
+ :: When using our bundled python we never want the users
+ :: PYTHONHOME or PYTHONPATH
+ :: https://github.com/emscripten-core/emsdk/issues/598
+ set PYTHONHOME=
+ set PYTHONPATH=
goto end
)
if exist "%~dp0python\3.7.4_64bit\python.exe" (
set EMSDK_PY="%~dp0python\3.7.4_64bit\python.exe"
+ set PYTHONHOME=
+ set PYTHONPATH=
goto end
)
if exist "%~dp0python\2.7.13.1_64bit\python-2.7.13.amd64\python.exe" (
set EMSDK_PY="%~dp0python\2.7.13.1_64bit\python-2.7.13.amd64\python.exe"
- goto end
-)
-
-if exist "%~dp0python\2.7.13.1_32bit\python-2.7.13\python.exe" (
- set EMSDK_PY="%~dp0python\2.7.13.1_32bit\python-2.7.13\python.exe"
- goto end
-)
-
-if exist "%~dp0python\2.7.5.3_64bit\python.exe" (
- set EMSDK_PY="%~dp0python\2.7.5.3_64bit\python.exe"
- goto end
-)
-
-if exist "%~dp0python\2.7.5.3_32bit\python.exe" (
- set EMSDK_PY="%~dp0python\2.7.5.3_32bit\python.exe"
- goto end
-)
-
-if exist "%~dp0python\2.7.5_64bit\python.exe" (
- set EMSDK_PY="%~dp0python\2.7.5_64bit\python.exe"
- goto end
-)
-
-if exist "%~dp0python\2.7.5.1_32bit\python.exe" (
- set EMSDK_PY="%~dp0python\2.7.5.1_32bit\python.exe"
+ set PYTHONHOME=
+ set PYTHONPATH=
goto end
)
diff --git a/emsdk.py b/emsdk.py
index 6570e28..e4669ee 100755
--- a/emsdk.py
+++ b/emsdk.py
@@ -2575,6 +2575,25 @@
env_string += 'export ' + key + '="' + value + '";\n'
else:
assert False
+ if 'EMSDK_PYTHON' in env_vars:
+ # When using our bundled python we never want the user's
+ # PYTHONHOME or PYTHONPATH
+ # See https://github.com/emscripten-core/emsdk/issues/598
+ if POWERSHELL:
+ env_string += 'Remove-Item env:PYTHONHOME\n'
+ env_string += 'Remove-Item env:PYTHONPATH\n'
+ elif CMD:
+ env_string += 'set PYTHONHOME=\n'
+ env_string += 'set PYTHONPATH=\n'
+ elif CSH:
+ env_string += 'unsetenv PYTHONHOME\n'
+ env_string += 'unsetenv PYTHONPATH\n'
+ elif BASH:
+ env_string += 'unset PYTHONHOME\n'
+ env_string += 'unset PYTHONPATH\n'
+ else:
+ assert False
+
errlog(key + ' = ' + value)
return env_string
diff --git a/scripts/test.py b/scripts/test.py
index 48d4a5e..c38de83 100755
--- a/scripts/test.py
+++ b/scripts/test.py
@@ -50,7 +50,13 @@
def checked_call_with_output(cmd, expected=None, unexpected=None, stderr=None):
cmd = cmd.split(' ')
print('running: %s' % cmd)
- stdout = subprocess.check_output(cmd, stderr=stderr, universal_newlines=True)
+ try:
+ stdout = subprocess.check_output(cmd, stderr=stderr, universal_newlines=True)
+ except subprocess.CalledProcessError as e:
+ print(e.stderr)
+ print(e.stdout)
+ raise e
+
if expected:
for x in listify(expected):
assert x in stdout, 'call had the right output: ' + stdout + '\n[[[' + x + ']]]'