Skip to content

Commit

Permalink
Clear PYTHONHOME when using bundled python (emscripten-core#600)
Browse files Browse the repository at this point in the history
  • Loading branch information
sbc100 authored Sep 17, 2020
1 parent 843c195 commit f8e0b49
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 31 deletions.
28 changes: 23 additions & 5 deletions emsdk
Original file line number Diff line number Diff line change
Expand Up @@ -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" "$@"
34 changes: 9 additions & 25 deletions emsdk.bat
Original file line number Diff line number Diff line change
Expand Up @@ -6,41 +6,25 @@ setlocal

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
)

Expand Down
19 changes: 19 additions & 0 deletions emsdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -2575,6 +2575,25 @@ def construct_env(tools_to_activate):
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

Expand Down
8 changes: 7 additions & 1 deletion scripts/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,13 @@ def check_call(cmd, **args):
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 + ']]]'
Expand Down

0 comments on commit f8e0b49

Please sign in to comment.