diff options
-rwxr-xr-x | bin/spack | 9 | ||||
-rw-r--r-- | lib/spack/docs/getting_started.rst | 8 | ||||
-rwxr-xr-x | share/spack/setup-env.csh | 12 | ||||
-rwxr-xr-x | share/spack/setup-env.fish | 15 | ||||
-rwxr-xr-x | share/spack/setup-env.sh | 8 |
5 files changed, 48 insertions, 4 deletions
@@ -10,9 +10,12 @@ # Following line is a shell no-op, and starts a multi-line Python comment. # See https://stackoverflow.com/a/47886254 """:" -# prefer python3, then python, then python2 -for cmd in python3 python python2; do - command -v > /dev/null $cmd && exec $cmd $0 "$@" +# prefer SPACK_PYTHON environment variable, python3, python, then python2 +for cmd in "${SPACK_PYTHON:-}" python3 python python2; do + if command -v > /dev/null "$cmd"; then + export SPACK_PYTHON="$(command -v "$cmd")" + exec "${SPACK_PYTHON}" "$0" "$@" + fi done echo "==> Error: spack could not find a python interpreter!" >&2 diff --git a/lib/spack/docs/getting_started.rst b/lib/spack/docs/getting_started.rst index 3cf910cc8d..6f3340b18b 100644 --- a/lib/spack/docs/getting_started.rst +++ b/lib/spack/docs/getting_started.rst @@ -75,6 +75,14 @@ shell integration for :ref:`certain commands <packaging-shell-support>`, If you do not want to use Spack's shell support, you can always just run the ``spack`` command directly from ``spack/bin/spack``. +When the ``spack`` command is executed it searches for an appropriate +Python interpreter to use, which can be explicitly overridden by setting +the ``SPACK_PYTHON`` environment variable. When sourcing the appropriate shell +setup script, ``SPACK_PYTHON`` will be set to the interpreter found at +sourcing time, ensuring future invocations of the ``spack`` command will +continue to use the same consistent python version regardless of changes in +the environment. + ^^^^^^^^^^^^^^^^^^ Check Installation diff --git a/share/spack/setup-env.csh b/share/spack/setup-env.csh index 8368274912..4ac0503947 100755 --- a/share/spack/setup-env.csh +++ b/share/spack/setup-env.csh @@ -58,6 +58,18 @@ alias spack 'set _sp_args = (\!*); source $_spack_share_dir/csh/spack.c alias spacktivate 'spack env activate' alias _spack_pathadd 'set _pa_args = (\!*) && source $_spack_share_dir/csh/pathadd.csh' +# Identify and lock the python interpreter +if (! $?SPACK_PYTHON) then + setenv SPACK_PYTHON "" +endif +foreach cmd ("$SPACK_PYTHON" python3 python python2) + command -v "$cmd" >& /dev/null + if ($status == 0) then + setenv SPACK_PYTHON `command -v "$cmd"` + break + endif +end + # Set variables needed by this script _spack_pathadd PATH "$SPACK_ROOT/bin" eval `spack --print-shell-vars csh` diff --git a/share/spack/setup-env.fish b/share/spack/setup-env.fish index 15eff90dd2..190934531d 100755 --- a/share/spack/setup-env.fish +++ b/share/spack/setup-env.fish @@ -253,7 +253,7 @@ function match_flag -d "checks all combinations of flags ocurring inside of a st set -l _a (string sub -s 2 (string trim "x$argv[1]")) set -l _b (string sub -s 2 (string trim "x$argv[2]")) - if test -z "$_a" || test -z "$_b" + if test -z "$_a" or test -z "$_b" return 0 end @@ -668,6 +668,19 @@ set -l sp_source_file (status -f) # name of current file # +# Identify and lock the python interpreter +# +for cmd in "$SPACK_PYTHON" python3 python python2 + set -l _sp_python (command -s "$cmd") + if test $status -eq 0 + set -x SPACK_PYTHON $_sp_python + break + end +end + + + +# # Find root directory and add bin to path. # set -l sp_share_dir (realpath (dirname $sp_source_file)) diff --git a/share/spack/setup-env.sh b/share/spack/setup-env.sh index c4c7af4b0a..cbee4428d0 100755 --- a/share/spack/setup-env.sh +++ b/share/spack/setup-env.sh @@ -326,6 +326,14 @@ if [ "$_sp_shell" = bash ]; then export -f _spack_shell_wrapper fi +# Identify and lock the python interpreter +for cmd in "${SPACK_PYTHON:-}" python3 python python2; do + if command -v > /dev/null "$cmd"; then + export SPACK_PYTHON="$(command -v "$cmd")" + break + fi +done + # # make available environment-modules # |