diff options
author | Jordan Galby <67924449+Jordan474@users.noreply.github.com> | 2021-10-03 16:10:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-03 16:10:33 +0200 |
commit | 0d6a2381b27ba10568a5f2d9c1d0e50a23d368fd (patch) | |
tree | 74a7da72ac75303d27e534fd14c5f7cd6b866d12 /lib | |
parent | b9e72557e8b52b63244500f226afda0efe798df2 (diff) | |
download | spack-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.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spack/spack/util/environment.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/util/module_cmd.py | 2 |
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. |