summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Galby <67924449+Jordan474@users.noreply.github.com>2021-10-03 16:10:33 +0200
committerGitHub <noreply@github.com>2021-10-03 16:10:33 +0200
commit0d6a2381b27ba10568a5f2d9c1d0e50a23d368fd (patch)
tree74a7da72ac75303d27e534fd14c5f7cd6b866d12
parentb9e72557e8b52b63244500f226afda0efe798df2 (diff)
downloadspack-0d6a2381b27ba10568a5f2d9c1d0e50a23d368fd.tar.gz
spack-0d6a2381b27ba10568a5f2d9c1d0e50a23d368fd.tar.bz2
spack-0d6a2381b27ba10568a5f2d9c1d0e50a23d368fd.tar.xz
spack-0d6a2381b27ba10568a5f2d9c1d0e50a23d368fd.zip
Fix JSONDecodeError when using compiler modules (#25624)
When using modules for compiler (and/or external package), if a package's `setup_[dependent_]build_environment` sets `PYTHONHOME`, it can influence the python subprocess executed to gather module information. The error seen was: ``` json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) ``` But the actual hidden error happened in the `python -c 'import json...'` subprocess, which made it return an empty string as json: ``` ModuleNotFoundError: No module named 'encodings' ``` This fix uses `python -E` to ignore `PYTHONHOME` and `PYTHONPATH`. Should be safe here because the python subprocess code only use packages built-in python. The python subprocess in `environment.py` was also patched to be safe and consistent.
-rw-r--r--lib/spack/spack/util/environment.py2
-rw-r--r--lib/spack/spack/util/module_cmd.py2
2 files changed, 2 insertions, 2 deletions
diff --git a/lib/spack/spack/util/environment.py b/lib/spack/spack/util/environment.py
index 073f60334e..075d7e88ea 100644
--- a/lib/spack/spack/util/environment.py
+++ b/lib/spack/spack/util/environment.py
@@ -989,7 +989,7 @@ def environment_after_sourcing_files(*files, **kwargs):
python_cmd = python_cmd.name if python_cmd else sys.executable
dump_cmd = 'import os, json; print(json.dumps(dict(os.environ)))'
- dump_environment = python_cmd + ' -c "{0}"'.format(dump_cmd)
+ dump_environment = python_cmd + ' -E -c "{0}"'.format(dump_cmd)
# Try to source the file
source_file_arguments = ' '.join([
diff --git a/lib/spack/spack/util/module_cmd.py b/lib/spack/spack/util/module_cmd.py
index d8c3ec8d14..b3c3db9b93 100644
--- a/lib/spack/spack/util/module_cmd.py
+++ b/lib/spack/spack/util/module_cmd.py
@@ -47,7 +47,7 @@ def module(*args):
module_cmd += 'LD_LIBRARY_PATH="$SPACK_LD_LIBRARY_PATH" '
# Execute the python command
- module_cmd += '%s -c "%s";' % (sys.executable, py_cmd)
+ module_cmd += '%s -E -c "%s";' % (sys.executable, py_cmd)
# If LD_LIBRARY_PATH was set after `module`, dump the old value because
# we have since corrupted it to ensure python would run.