Fix use of sys.executable for module/env commands (#14496)
* Fix use of sys.executable for module/env commands * Fix unit tests * More consistent quotation, less duplication * Fix import syntax
This commit is contained in:
parent
7a61d1dbd1
commit
808c80d65a
@ -17,6 +17,7 @@
|
||||
|
||||
import llnl.util.tty as tty
|
||||
import spack.util.executable as executable
|
||||
from spack.util.module_cmd import py_cmd
|
||||
|
||||
from llnl.util.lang import dedupe
|
||||
|
||||
@ -918,8 +919,8 @@ def _source_single_file(file_and_args, environment):
|
||||
source_file.extend(x for x in file_and_args)
|
||||
source_file = ' '.join(source_file)
|
||||
|
||||
dump_cmd = 'import os, json; print(json.dumps(dict(os.environ)))'
|
||||
dump_environment = sys.executable + ' -c "{0}"'.format(dump_cmd)
|
||||
dump_environment = 'PYTHONHOME="{0}" "{1}" -c "{2}"'.format(
|
||||
sys.prefix, sys.executable, py_cmd)
|
||||
|
||||
# Try to source the file
|
||||
source_file_arguments = ' '.join([
|
||||
|
@ -18,7 +18,7 @@
|
||||
# This list is not exhaustive. Currently we only use load and unload
|
||||
# If we need another option that changes the environment, add it here.
|
||||
module_change_commands = ['load', 'swap', 'unload', 'purge', 'use', 'unuse']
|
||||
py_cmd = "'import os;import json;print(json.dumps(dict(os.environ)))'"
|
||||
py_cmd = 'import os; import json; print(json.dumps(dict(os.environ)))'
|
||||
|
||||
# This is just to enable testing. I hate it but we can't find a better way
|
||||
_test_mode = False
|
||||
@ -32,7 +32,8 @@ def module(*args):
|
||||
if args[0] in module_change_commands:
|
||||
# Do the module manipulation, then output the environment in JSON
|
||||
# and read the JSON back in the parent process to update os.environ
|
||||
module_cmd += ' >/dev/null;' + sys.executable + ' -c %s' % py_cmd
|
||||
module_cmd += ' > /dev/null; PYTHONHOME="{0}" "{1}" -c "{2}"'.format(
|
||||
sys.prefix, sys.executable, py_cmd)
|
||||
module_p = subprocess.Popen(module_cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
|
Loading…
Reference in New Issue
Block a user