Basic Usage

The spack command has many subcommands. You’ll only need a small subset of them for typical usage.

Note that Spack colorizes output. less -R should be used with Spack to maintain this colorization. E.g.:

$ spack find | less -R

It is recommended that the following be put in your .bashrc file:

alias less='less -R'

Listing available packages

To install software with Spack, you need to know what software is available. You can see a list of available package names at the Package List webpage, or using the spack list command.

spack list

The spack list command prints out a list of all of the packages Spack can install:

$ spack list
abinit                           mummer                                 r-c50
abyss                            mumps                                  r-callr
accfft                           munge                                  r-car
ack                              muparser                               r-caret
activeharmony                    muscle                                 r-category
adept-utils                      muse                                   r-catools
adios                            muster                                 r-cdcfluview
adios2                           mvapich2                               r-cellranger
adlbx                            mxml                                   r-checkmate
adol-c                           mxnet                                  r-checkpoint
aegean                           nag                                    r-chemometrics
aida                             nalu                                   r-chron
albany                           nalu-wind                              r-circlize
albert                           namd                                   r-class
alglib                           nano                                   r-classint
allinea-forge                    nanoflann                              r-cli
allinea-reports                  nanopb                                 r-clipr
allpaths-lg                      nasm                                   r-cluster
alquimia                         nauty                                  r-clusterprofiler
alsa-lib                         ncbi-magicblast                        r-cner
aluminum                         ncbi-rmblastn                          r-coda
amg                              ncbi-toolkit                           r-codetools
amg2013                          nccl                                   r-coin
amp                              nccmp                                  r-colorspace
ampliconnoise                    ncdu                                   r-complexheatmap
amrex                            ncftp                                  r-corpcor
amrvis                           ncl                                    r-corrplot
andi                             nco                                    r-covr
angsd                            ncurses                                r-cowplot
ant                              ncview                                 r-crayon
antlr                            ndiff                                  r-crosstalk
ants                             nek5000                                r-ctc
ape                              nekbone                                r-cubature
aperture-photometry              nekcem                                 r-cubist
apex                             nektar                                 r-curl
apple-libunwind                  neovim                                 r-data-table
applewmproto                     nest                                   r-dbi
appres                           netcdf                                 r-dbplyr
apr                              netcdf-cxx                             r-delayedarray
apr-util                         netcdf-cxx4                            r-deldir
aragorn                          netcdf-fortran                         r-dendextend
archer                           netgauge                               r-deoptim
argobots                         netgen                                 r-deoptimr
argp-standalone                  netlib-lapack                          r-deseq
argtable                         netlib-scalapack                       r-deseq2
arlecore                         netlib-xblas                           r-desolve
armadillo                        nettle                                 r-devtools
arpack-ng                        neuron                                 r-diagrammer
arrow                            nextflow                               r-dicekriging
ascent                           nfft                                   r-dichromat
asciidoc                         nghttp2                                r-diffusionmap
aspa                             nginx                                  r-digest
aspcud                           ngmlr                                  r-diptest
aspect                           ninja                                  r-dirichletmultinomial
aspell                           ninja-fortran                          r-dismo
aspell6-de                       nlohmann-json                          r-dnacopy
aspell6-en                       nlopt                                  r-do-db
aspell6-es                       nmap                                   r-domc
aspera-cli                       nnvm                                   r-doparallel
assimp                           node-js                                r-dorng
astra                            notmuch                                r-dose
astral                           npb                                    r-downloader
astyle                           npm                                    r-dplyr
at-spi2-atk                      npth                                   r-dt
at-spi2-core                     nspr                                   r-dtw
atk                              numactl                                r-dygraphs
atlas                            numdiff                                r-e1071
atom-dft                         nut                                    r-edger
atompaw                          nvptx-tools                            r-ellipse
atop                             nwchem                                 r-ensembldb
augustus                         ocaml                                  r-ergm
autoconf                         occa                                   r-evaluate
autodock-vina                    oce                                    r-expm
autofact                         oclint                                 r-factoextra
autogen                          oclock                                 r-factominer
automaded                        octave                                 r-fastcluster
automake                         octave-optim                           r-fastmatch
axel                             octave-splines                         r-ff
axl                              octave-struct                          r-fftwtools
bamdst                           octopus                                r-fgsea
bamtools                         of-adios-write                         r-filehash
bamutil                          of-precice                             r-findpython
barrnap                          omega-h                                r-fit-models
bash                             ompss                                  r-flashclust
bash-completion                  ompt-openmp                            r-flexclust
bats                             oniguruma                              r-flexmix
bazel                            ont-albacore                           r-fnn
bbcp                             opa-psm2                               r-forcats
bbmap                            opam                                   r-foreach
bc                               opari2                                 r-forecast
bcftools                         openbabel                              r-foreign
bcl2fastq2                       openblas                               r-formatr
bdftopcf                         opencoarrays                           r-formula
bdw-gc                           opencv                                 r-fpc
bear                             openexr                                r-fracdiff
beast1                           openfast                               r-futile-logger
beast2                           openfoam-com                           r-futile-options
bedops                           openfoam-org                           r-gbm
bedtools2                        openfst                                r-gcrma
beforelight                      opengl                                 r-gdata
benchmark                        openglu                                r-gdsfmt
berkeley-db                      openjpeg                               r-geiger
bertini                          openmc                                 r-genefilter
bib2xhtml                        openmpi                                r-genelendatabase
bigreqsproto                     opennurbs                              r-geneplotter
binutils                         openpmd-api                            r-genie3
bioawk                           openscenegraph                         r-genomeinfodb
biopieces                        openslide                              r-genomeinfodbdata
bismark                          openspeedshop                          r-genomicalignments
bison                            openspeedshop-utils                    r-genomicfeatures
bitmap                           openssh                                r-genomicranges
blasr                            openssl                                r-geomorph
blasr-libcpp                     opium                                  r-geoquery
blast-plus                       optional-lite                          r-geosphere
blat                             opus                                   r-getopt
blaze                            orca                                   r-getoptlong
blis                             orfm                                   r-ggally
bliss                            orthofinder                            r-ggbio
blitz                            orthomcl                               r-ggdendro
bmake                            osu-micro-benchmarks                   r-ggjoy
bml                              otf                                    r-ggmap
bohrium                          otf2                                   r-ggplot2
bolt                             p4est                                  r-ggpubr
bookleaf-cpp                     p7zip                                  r-ggrepel
boost                            pacbio-daligner                        r-ggridges
boostmplcartesianproduct         pacbio-damasker                        r-ggsci
bowtie                           pacbio-dazz-db                         r-ggvis
bowtie2                          pacbio-dextractor                      r-gistr
boxlib                           packmol                                r-git2r
bpp-core                         pacvim                                 r-glimma
bpp-phyl                         pagit                                  r-glmnet
bpp-seq                          pagmo                                  r-globaloptions
bpp-suite                        paml                                   r-glue
bracken                          panda                                  r-gmodels
braker                           pandaseq                               r-gmp
branson                          pango                                  r-go-db
breakdancer                      pangomm                                r-googlevis
breseq                           papi                                   r-goplot
brigand                          papyrus                                r-gosemsim
bsseeker2                        paradiseo                              r-goseq
bucky                            parallel                               r-gostats
bumpversion                      parallel-netcdf                        r-gplots
busco                            paraver                                r-graph
butter                           paraview                               r-gridbase
bwa                              parmetis                               r-gridextra
bwtool                           parmgridgen                            r-gseabase
byobu                            parquet                                r-gss
bzip2                            parsimonator                           r-gsubfn
c-blosc                          parsplice                              r-gtable
c-lime                           partitionfinder                        r-gtools
cabana                           patch                                  r-gtrellis
caffe                            patchelf                               r-gviz
cairo                            pathfinder                             r-haven
cairomm                          pax-utils                              r-hexbin
caliper                          pbbam                                  r-highr
callpath                         pbmpi                                  r-hmisc
camellia                         pcma                                   r-hms
candle-benchmarks                pcre                                   r-htmltable
cantera                          pcre2                                  r-htmltools
canu                             pdf2svg                                r-htmlwidgets
cap3                             pdftk                                  r-httpuv
cares                            pdsh                                   r-httr
cask                             pdt                                    r-hwriter
casper                           pegtl                                  r-hypergraph
catalyst                         pennant                                r-ica
catch                            percept                                r-igraph
cbench                           perl                                   r-illuminaio
cblas                            perl-algorithm-diff                    r-impute
cbtf                             perl-app-cmd                           r-influencer
cbtf-argonavis                   perl-array-utils                       r-inline
cbtf-argonavis-gui               perl-b-hooks-endofscope                r-interactivedisplaybase
cbtf-krell                       perl-bio-perl                          r-ipred
cbtf-lanl                        perl-bit-vector                        r-iranges
ccache                           perl-cairo                             r-irdisplay
cctools                          perl-capture-tiny                      r-irkernel
cdbfasta                         perl-carp-clan                         r-irlba
cdd                              perl-cgi                               r-iso
cddlib                           perl-class-data-inheritable            r-iterators
cdhit                            perl-class-inspector                   r-janitor
cdo                              perl-class-load                        r-jaspar2018
ceed                             perl-class-load-xs                     r-jomo
cereal                           perl-compress-raw-bzip2                r-jpeg
ceres-solver                     perl-compress-raw-zlib                 r-jsonlite
cfitsio                          perl-contextual-return                 r-kegg-db
cgal                             perl-cpan-meta-check                   r-kegggraph
cgm                              perl-data-optlist                      r-keggrest
cgns                             perl-data-stag                         r-kernlab
channelflow                      perl-dbd-mysql                         r-kernsmooth
charliecloud                     perl-dbd-sqlite                        r-kknn
charmpp                          perl-dbfile                            r-knitr
chatterbug                       perl-dbi                               r-ks
check                            perl-devel-cycle                       r-labeling
chlorop                          perl-devel-globaldestruction           r-lambda-r
chombo                           perl-devel-overloadinfo                r-laplacesdemon
cistem                           perl-devel-stacktrace                  r-lars
cityhash                         perl-digest-md5                        r-lattice
clamr                            perl-dist-checkconflicts               r-latticeextra
clapack                          perl-encode-locale                     r-lava
claw                             perl-eval-closure                      r-lazyeval
cleaveland4                      perl-exception-class                   r-leaflet
cleverleaf                       perl-exporter-tiny                     r-leaps
clfft                            perl-extutils-depends                  r-learnbayes
clhep                            perl-extutils-makemaker                r-lhs
clingo                           perl-extutils-pkgconfig                r-limma
cloc                             perl-file-copy-recursive               r-lme4
cloog                            perl-file-listing                      r-lmtest
cloverleaf                       perl-file-pushd                        r-locfit
cloverleaf3d                     perl-file-sharedir-install             r-log4r
clustalo                         perl-file-slurp-tiny                   r-lpsolve
clustalw                         perl-file-slurper                      r-lsei
cmake                            perl-file-which                        r-lubridate
cmocka                           perl-font-ttf                          r-magic
cmor                             perl-gd                                r-magrittr
cnmem                            perl-gd-graph                          r-makecdfenv
cnpy                             perl-gd-text                           r-maldiquant
cntk                             perl-gdgraph-histogram                 r-mapproj
cntk1bitsgd                      perl-graph                             r-maps
codar-cheetah                    perl-graph-readwrite                   r-maptools
codes                            perl-html-parser                       r-markdown
coevp                            perl-html-tagset                       r-mass
cohmm                            perl-http-cookies                      r-matr
coinhsl                          perl-http-daemon                       r-matrix
colm                             perl-http-date                         r-matrixmodels
colordiff                        perl-http-message                      r-matrixstats
comd                             perl-http-negotiate                    r-mclust
commons-lang                     perl-inline                            r-mcmcglmm
commons-lang3                    perl-inline-c                          r-mco
commons-logging                  perl-intervaltree                      r-mda
compiz                           perl-io-compress                       r-memoise
compositeproto                   perl-io-html                           r-mergemaid
conduit                          perl-io-sessiondata                    r-methodss3
constype                         perl-io-socket-ssl                     r-mgcv
converge                         perl-io-string                         r-mgraster
coreutils                        perl-json                              r-mice
corset                           perl-libwww-perl                       r-mime
cosmomc                          perl-list-moreutils                    r-minfi
cosp2                            perl-log-log4perl                      r-minqa
cp2k                             perl-lwp                               r-misc3d
cppad                            perl-lwp-mediatypes                    r-mitml
cppcheck                         perl-lwp-protocol-https                r-mixtools
cppgsl                           perl-math-cdf                          r-mlbench
cpprestsdk                       perl-math-cephes                       r-mlinterfaces
cppunit                          perl-math-matrixreal                   r-mlr
cppzmq                           perl-module-build                      r-mlrmbo
cpu-features                     perl-module-implementation             r-mmwrweek
cpuinfo                          perl-module-runtime                    r-mnormt
cram                             perl-module-runtime-conflicts          r-modelmetrics
cryptopp                         perl-moose                             r-modelr
cscope                           perl-mozilla-ca                        r-modeltools
csdp                             perl-mro-compat                        r-mpm
ctffind                          perl-namespace-clean                   r-msnbase
cub                              perl-net-http                          r-multcomp
cube                             perl-net-scp-expect                    r-multicool
cubelib                          perl-net-ssleay                        r-multtest
cubew                            perl-package-deprecationmanager        r-munsell
cuda                             perl-package-stash                     r-mvtnorm
cuda-memtest                     perl-package-stash-xs                  r-mzid
cudnn                            perl-padwalker                         r-mzr
cufflinks                        perl-parallel-forkmanager              r-nanotime
cups                             perl-params-util                       r-ncbit
curl                             perl-parse-recdescent                  r-ncdf4
cvs                              perl-pdf-api2                          r-network
czmq                             perl-pegex                             r-networkd3
dakota                           perl-perl4-corelibs                    r-nlme
daligner                         perl-perl6-slurp                       r-nloptr
damageproto                      perl-perlio-gzip                       r-nmf
damaris                          perl-perlio-utf8-strict                r-nnet
damselfly                        perl-scalar-util-numeric               r-nnls
darshan-runtime                  perl-soap-lite                         r-nor1mix
darshan-util                     perl-star-fusion                       r-np
dash                             perl-statistics-descriptive            r-numderiv
datamash                         perl-statistics-pca                    r-oligoclasses
dataspaces                       perl-sub-exporter                      r-oo
davix                            perl-sub-exporter-progressive          r-openssl
dbcsr                            perl-sub-identify                      r-org-hs-eg-db
dbus                             perl-sub-install                       r-organismdbi
dealii                           perl-sub-name                          r-packrat
dealii-parameter-gui             perl-sub-uplevel                       r-pacman
deconseq-standalone              perl-svg                               r-pamr
dejagnu                          perl-swissknife                        r-pan
delly2                           perl-task-weaken                       r-parallelmap
denovogear                       perl-term-readkey                      r-paramhelpers
dftfe                            perl-test-cleannamespaces              r-party
dia                              perl-test-deep                         r-partykit
dialign-tx                       perl-test-differences                  r-pathview
diamond                          perl-test-exception                    r-pbapply
diffsplice                       perl-test-fatal                        r-pbdzmq
diffutils                        perl-test-memory-cycle                 r-pbkrtest
direnv                           perl-test-most                         r-pcamethods
discovar                         perl-test-needs                        r-pcapp
discovardenovo                   perl-test-requires                     r-permute
dislin                           perl-test-requiresinternet             r-pfam-db
diy                              perl-test-warn                         r-phangorn
dlpack                           perl-test-warnings                     r-phantompeakqualtools
dmd                              perl-text-csv                          r-phyloseq
dmlc-core                        perl-text-diff                         r-picante
dmtcp                            perl-text-simpletable                  r-pkgconfig
dmxproto                         perl-text-soundex                      r-pkgmaker
docbook-xml                      perl-text-unidecode                    r-plogr
docbook-xsl                      perl-time-hires                        r-plot3d
dos2unix                         perl-time-piece                        r-plotly
dotnet-core-sdk                  perl-try-tiny                          r-plotrix
double-conversion                perl-uri                               r-pls
doxygen                          perl-uri-escape                        r-plyr
dri2proto                        perl-version                           r-pmcmr
dri3proto                        perl-want                              r-png
dsdp                             perl-www-robotrules                    r-powerlaw
dsrc                             perl-xml-parser                        r-prabclus
dtcmp                            perl-xml-parser-lite                   r-praise
dyninst                          perl-xml-simple                        r-preprocesscore
ea-utils                         perl-yaml-libyaml                      r-prettyunits
easybuild                        petsc                                  r-processx
ebms                             pexsi                                  r-prodlim
eccodes                          pfft                                   r-progress
eclipse-gcj-parser               pflotran                               r-protgenerics
ecp-proxy-apps                   pfunit                                 r-proto
ed                               pgdspider                              r-proxy
editres                          pgi                                    r-pryr
eigen                            pgmath                                 r-ps
elasticsearch                    phantompeakqualtools                   r-psych
elemental                        phast                                  r-ptw
elfutils                         phasta                                 r-purrr
elk                              phist                                  r-quadprog
elpa                             phylip                                 r-quantmod
emacs                            phyluce                                r-quantreg
ember                            picard                                 r-quantro
emboss                           picsar                                 r-qvalue
encodings                        picsarlite                             r-r6
energyplus                       pidx                                   r-randomforest
environment-modules              pigz                                   r-ranger
eospac                           pilon                                  r-rappdirs
er                               pindel                                 r-raster
es                               piranha                                r-rbgl
esmf                             pism                                   r-rbokeh
essl                             pixman                                 r-rcolorbrewer
ethminer                         pkg-config                             r-rcpp
etsf-io                          pkgconf                                r-rcpparmadillo
everytrace                       planck-likelihood                      r-rcppblaze
everytrace-example               plasma                                 r-rcppcctz
evieext                          platypus                               r-rcppcnpy
exabayes                         plink                                  r-rcppeigen
examinimd                        plplot                                 r-rcppprogress
exampm                           plumed                                 r-rcurl
exasp2                           pmgr-collective                        r-rda
exmcutils                        pmix                                   r-readr
exodusii                         pnfft                                  r-readxl
exonerate                        pngwriter                              r-registry
expat                            pnmpi                                  r-rematch
expect                           poamsa                                 r-reordercluster
express                          pocl                                   r-reportingtools
extrae                           polymake                               r-repr
exuberant-ctags                  poppler                                r-reprex
f90cache                         poppler-data                           r-reshape
fabtests                         porta                                  r-reshape2
falcon                           portage                                r-rex
fast-global-file-status          portcullis                             r-rgdal
fasta                            postgresql                             r-rgenoud
fastjar                          ppl                                    r-rgeos
fastmath                         pplacer                                r-rgl
fastme                           prank                                  r-rgooglemaps
fastphase                        precice                                r-rgraphviz
fastq-screen                     presentproto                           r-rhdf5
fastqc                           preseq                                 r-rhtslib
fastqvalidator                   price                                  r-rinside
fasttree                         primer3                                r-rjags
fastx-toolkit                    prinseq-lite                           r-rjava
fenics                           printproto                             r-rjson
fermi                            prng                                   r-rjsonio
fermikit                         probconsrna                            r-rlang
fermisciencetools                prodigal                               r-rmarkdown
ferret                           proj                                   r-rminer
ffmpeg                           protobuf                               r-rmpfr
fftw                             proxymngr                              r-rmpi
figtree                          pruners-ninja                          r-rmysql
fimpute                          ps-lite                                r-rngtools
findutils                        psi4                                   r-robustbase
fio                              pslib                                  r-rocr
fish                             psm                                    r-rodbc
fixesproto                       psmc                                   r-rots
flac                             pstreams                               r-roxygen2
flang                            pugixml                                r-rpart
flann                            pumi                                   r-rpart-plot
flash                            pv                                     r-rpostgresql
flatbuffers                      pvm                                    r-rprojroot
flecsale                         pxz                                    r-rsamtools
flecsi                           py-3to2                                r-rsnns
flex                             py-4suite-xml                          r-rsolnp
flint                            py-abipy                               r-rsqlite
flit                             py-adios                               r-rstan
fltk                             py-affine                              r-rstudioapi
flux-core                        py-alabaster                           r-rtracklayer
flux-sched                       py-apache-libcloud                     r-rtsne
fluxbox                          py-apipkg                              r-rvcheck
fmt                              py-appdirs                             r-rvest
foam-extend                      py-appnope                             r-rzmq
folly                            py-apscheduler                         r-s4vectors
font-adobe-100dpi                py-argcomplete                         r-samr
font-adobe-75dpi                 py-argparse                            r-sandwich
font-adobe-utopia-100dpi         py-ase                                 r-scales
font-adobe-utopia-75dpi          py-asn1crypto                          r-scatterplot3d
font-adobe-utopia-type1          py-astroid                             r-sdmtools
font-alias                       py-astropy                             r-segmented
font-arabic-misc                 py-atomicwrites                        r-selectr
font-bh-100dpi                   py-attrs                               r-seqinr
font-bh-75dpi                    py-autopep8                            r-seqlogo
font-bh-lucidatypewriter-100dpi  py-avro                                r-seurat
font-bh-lucidatypewriter-75dpi   py-avro-json-serializer                r-sf
font-bh-ttf                      py-babel                               r-sfsmisc
font-bh-type1                    py-backcall                            r-shape
font-bitstream-100dpi            py-backports-abc                       r-shiny
font-bitstream-75dpi             py-backports-functools-lru-cache       r-shinydashboard
font-bitstream-speedo            py-backports-shutil-get-terminal-size  r-shortread
font-bitstream-type1             py-backports-ssl-match-hostname        r-siggenes
font-cronyx-cyrillic             py-basemap                             r-simpleaffy
font-cursor-misc                 py-bcbio-gff                           r-sm
font-daewoo-misc                 py-beautifulsoup4                      r-smoof
font-dec-misc                    py-binwalk                             r-sn
font-ibm-type1                   py-biom-format                         r-snow
font-isas-misc                   py-biopython                           r-snowfall
font-jis-misc                    py-bitarray                            r-snprelate
font-micro-misc                  py-bitstring                           r-som
font-misc-cyrillic               py-bleach                              r-somaticsignatures
font-misc-ethiopic               py-blessings                           r-sourcetools
font-misc-meltho                 py-bokeh                               r-sp
font-misc-misc                   py-boltons                             r-sparsem
font-mutt-misc                   py-bottleneck                          r-spdep
font-schumacher-misc             py-breakseq2                           r-speedglm
font-screen-cyrillic             py-brian                               r-spem
font-sony-misc                   py-brian2                              r-splitstackshape
font-sun-misc                    py-bsddb3                              r-sqldf
font-util                        py-bx-python                           r-squash
font-winitzki-cyrillic           py-cartopy                             r-stanheaders
font-xfree86-type1               py-cclib                               r-statmod
fontcacheproto                   py-cdat-lite                           r-statnet-common
fontconfig                       py-cdo                                 r-stringi
fontsproto                       py-certifi                             r-stringr
fonttosfnt                       py-cffi                                r-strucchange
fp16                             py-chardet                             r-subplex
fpc                              py-checkm-genome                       r-summarizedexperiment
fr-hit                           py-cheetah                             r-survey
freebayes                        py-click                               r-survival
freeglut                         py-cligj                               r-sva
freetype                         py-cloudpickle                         r-tarifx
fseq                             py-cogent                              r-tclust
fsl                              py-colorama                            r-tensora
fslsfonts                        py-colormath                           r-testit
fstobdf                          py-configparser                        r-testthat
ftgl                             py-counter                             r-tfbstools
funhpc                           py-coverage                            r-tfmpvalue
fyba                             py-cpuinfo                             r-th-data
gapbs                            py-crispresso                          r-threejs
gapcloser                        py-cryptography                        r-tibble
gapfiller                        py-csvkit                              r-tidycensus
gasnet                           py-current                             r-tidyr
gatk                             py-cutadapt                            r-tidyselect
gaussian                         py-cvxopt                              r-tidyverse
gawk                             py-cycler                              r-tiff
gblocks                          py-cython                              r-tigris
gcc                              py-dask                                r-timedate
gccmakedep                       py-dateutil                            r-tmixclust
gccxml                           py-dbf                                 r-topgo
gconf                            py-decorator                           r-trimcluster
gcta                             py-deeptools                           r-truncnorm
gdal                             py-dendropy                            r-trust
gdb                              py-dill                                r-tseries
gdbm                             py-discover                            r-tsne
gdk-pixbuf                       py-dlcpar                              r-ttr
gdl                              py-docopt                              r-udunits2
geant4                           py-docutils                            r-units
gearshifft                       py-doxypy                              r-utils
gemmlowp                         py-doxypypy                            r-uuid
genemark-et                      py-dryscrape                           r-variantannotation
genomefinisher                   py-dxchange                            r-varselrf
genometools                      py-dxfile                              r-vcd
geopm                            py-easybuild-easyblocks                r-vegan
geos                             py-easybuild-easyconfigs               r-vgam
gettext                          py-easybuild-framework                 r-vipor
gflags                           py-edffile                             r-viridis
ghost                            py-editdistance                        r-viridislite
ghostscript                      py-elasticsearch                       r-visnetwork
ghostscript-fonts                py-elephant                            r-vsn
giflib                           py-emcee                               r-whisker
git                              py-entrypoints                         r-withr
git-imerge                       py-enum34                              r-xde
git-lfs                          py-epydoc                              r-xgboost
gl2ps                            py-espresso                            r-xlconnect
glew                             py-espressopp                          r-xlconnectjars
glfmultiples                     py-et-xmlfile                          r-xlsx
glib                             py-eventlet                            r-xlsxjars
glibmm                           py-execnet                             r-xmapbridge
glimmer                          py-fastaindex                          r-xml
glm                              py-fasteners                           r-xml2
global                           py-faststructure                       r-xtable
globalarrays                     py-filelock                            r-xts
globus-toolkit                   py-fiscalyear                          r-xvector
glog                             py-flake8                              r-yaml
gloo                             py-flake8-polyfill                     r-yapsa
glpk                             py-flask                               r-yaqcaffy
glproto                          py-flask-compress                      r-yarn
glvis                            py-flask-socketio                      r-zlibbioc
gmake                            py-flexx                               r-zoo
gmap-gsnap                       py-fn                                  racon
gmime                            py-fparser                             raft
gmodel                           py-funcsigs                            ragel
gmp                              py-functools32                         raja
gmsh                             py-future                              randfold
gnat                             py-futures                             random123
gnu-prolog                       py-fypp                                randrproto
gnupg                            py-gdbgui                              range-v3
gnuplot                          py-genders                             rankstr
gnutls                           py-genshi                              rapidjson
go                               py-gevent                              ravel
go-bootstrap                     py-git-review                          raxml
gobject-introspection            py-git2                                ray
googletest                       py-gnuplot                             rclone
gotcha                           py-goatools                            rdma-core
gource                           py-gpaw                                rdp-classifier
gperf                            py-greenlet                            re2c
gperftools                       py-griddataformats                     readfq
gplates                          py-guidata                             readline
grackle                          py-guiqwt                              recordproto
gradle                           py-h5py                                redset
grandr                           py-hdfs                                redundans
graph500                         py-hepdata-validator                   regcm
graphicsmagick                   py-html2text                           relion
graphlib                         py-html5lib                            rempi
graphmap                         py-htseq                               rename
graphviz                         py-httpbin                             rendercheck
grass                            py-hypothesis                          renderproto
grib-api                         py-idna                                repeatmasker
grnboost                         py-igraph                              resourceproto
groff                            py-illumina-utils                      revbayes
gromacs                          py-imageio                             rgb
gsl                              py-imagesize                           rhash
gslib                            py-iminuit                             rlwrap
gtkmm                            py-importlib                           rmats
gtkorvo-atl                      py-ipaddress                           rmlab
gtkorvo-cercs-env                py-ipdb                                rna-seqc
gtkorvo-dill                     py-ipykernel                           rngstreams
gtkorvo-enet                     py-ipython                             rockstar
gtkplus                          py-ipython-genutils                    root
gts                              py-ipywidgets                          rose
guidance                         py-isort                               ross
guile                            py-itsdangerous                        rr
gurobi                           py-jdcal                               rsbench
h5hut                            py-jedi                                rsem
h5part                           py-jinja2                              rstart
h5utils                          py-joblib                              rsync
h5z-zfp                          py-jprops                              rtags
hacckernels                      py-jpype                               rtax
hadoop                           py-jsonschema                          ruby
halc                             py-junit-xml                           ruby-gnuplot
hapcut2                          py-jupyter-client                      ruby-narray
hapdip                           py-jupyter-console                     ruby-ronn
haploview                        py-jupyter-core                        ruby-rubyinline
harfbuzz                         py-jupyter-notebook                    ruby-svn2git
harminv                          py-keras                               ruby-terminal-table
hdf                              py-kiwisolver                          rust
hdf5                             py-lark-parser                         rust-bindgen
hdf5-blosc                       py-latexcodec                          sabre
help2man                         py-lazy                                sailfish
henson                           py-lazy-object-proxy                   salmon
hepmc                            py-lazy-property                       sambamba
heppdt                           py-lazyarray                           samblaster
hic-pro                          py-libconf                             samrai
highfive                         py-libensemble                         samtools
highwayhash                      py-line-profiler                       sandbox
hiop                             py-linecache2                          sas
hisat2                           py-lit                                 satsuma2
hisea                            py-llvmlite                            savanna
hmmer                            py-lmfit                               saws
homer                            py-localcider                          sbt
hoomd-blue                       py-locket                              scala
hpccg                            py-lockfile                            scalasca
hpctoolkit                       py-logilab-common                      scalpel
hpctoolkit-externals             py-lrudict                             scan-for-matches
hpgmg                            py-lxml                                scons
hpl                              py-lzstring                            scorec-core
hpx                              py-macholib                            scorep
hpx5                             py-machotools                          scotch
hsakmt                           py-macs2                               scr
hstr                             py-maestrowf                           screen
htop                             py-mako                                scripts
htslib                           py-mappy                               scrnsaverproto
httpie                           py-markdown                            sctk
hub                              py-markupsafe                          sdl2
hunspell                         py-matplotlib                          sdl2-image
hwloc                            py-mccabe                              sed
hybpiper                         py-mdanalysis                          sentieon-genomics
hydra                            py-meep                                seqan
hydrogen                         py-memory-profiler                     seqprep
hypre                            py-methylcode                          seqtk
i3                               py-mg-rast-tools                       serf
ibmisc                           py-misopy                              sessreg
iceauth                          py-mistune                             setxkbmap
icedtea                          py-mock                                sga
icet                             py-moltemplate                         shapeit
ico                              py-mongo                               shared-mime-info
icu4c                            py-monotonic                           shiny-server
id3lib                           py-monty                               shocklibs
idba                             py-more-itertools                      shoremap
igraph                           py-mpi4py                              shortbred
igvtools                         py-mpmath                              shortstack
ilmbase                          py-multiprocess                        showfont
image-magick                     py-multiqc                             shuffile
imake                            py-mx                                  sickle
imp                              py-mxnet                               siesta
impute2                          py-myhdl                               signalp
infernal                         py-mysqldb1                            signify
inputproto                       py-natsort                             silo
intel                            py-nbconvert                           simplemoc
intel-daal                       py-nbformat                            simul
intel-gpu-tools                  py-neo                                 simulationio
intel-ipp                        py-nestle                              singularity
intel-mkl                        py-netcdf4                             skilion-onedrive
intel-mkl-dnn                    py-netifaces                           sleef
intel-mpi                        py-networkx                            slepc
intel-parallel-studio            py-nose                                slurm
intel-tbb                        py-nosexcover                          smalt
intel-xed                        py-numba                               smproxy
intltool                         py-numexpr                             snakemake
ior                              py-numexpr3                            snap
iozone                           py-numpy                               snap-berkeley
iperf2                           py-numpydoc                            snap-korf
iperf3                           py-olefile                             snappy
ipopt                            py-ont-fast5-api                       snbone
isaac                            py-openpmd-validator                   sniffles
isaac-server                     py-openpyxl                            snpeff
isl                              py-openslide-python                    snphylo
itstool                          py-opentuner                           snptest
itsx                             py-ordereddict                         soap2
jackcess                         py-oset                                soapdenovo-trans
jags                             py-owslib                              soapdenovo2
jansson                          py-packaging                           soapindel
jasper                           py-palettable                          soapsnp
jbigkit                          py-pandas                              sofa-c
jchronoss                        py-paramiko                            somatic-sniper
jdk                              py-partd                               sortmerna
jellyfish                        py-pathlib2                            sosflow
jemalloc                         py-pathos                              sowing
jmol                             py-pathspec                            sox
jq                               py-patsy                               spades
json-c                           py-pbr                                 span-lite
json-cwx                         py-pep8-naming                         spark
json-glib                        py-perf                                sparsehash
jsoncpp                          py-performance                         sparta
judy                             py-periodictable                       spdlog
julia                            py-petsc4py                            spectrum-mpi
k8                               py-pexpect                             speex
kahip                            py-phonopy                             spglib
kaiju                            py-pickleshare                         sph2pipe
kaks-calculator                  py-picrust                             spherepack
kaldi                            py-pil                                 spindle
kallisto                         py-pillow                              spot
karma                            py-pip                                 sqlite
kbproto                          py-pipits                              sqlitebrowser
kdiff3                           py-pkgconfig                           squid
kealib                           py-plotly                              sra-toolkit
kentutils                        py-pluggy                              ssht
kibana                           py-ply                                 sspace-longread
kim-api                          py-pmw                                 sspace-standard
kmergenie                        py-poster                              sst-core
kokkos                           py-pox                                 sst-dumpi
kraken                           py-ppft                                sst-macro
krb5                             py-prettytable                         stacks
krims                            py-progress                            staden-io-lib
kripke                           py-proj                                star
kvasir-mpl                       py-projectq                            star-ccm-plus
kvtree                           py-prompt-toolkit                      startup-notification
laghos                           py-protobuf                            stat
lammps                           py-psutil                              stc
last                             py-psyclone                            steps
lastz                            py-ptyprocess                          stow
latte                            py-pudb                                strace
launchmon                        py-py                                  stream
lazyten                          py-py2bit                              strelka
lbann                            py-py2cairo                            stress
lbxproxy                         py-py2neo                              string-view-lite
lbzip2                           py-py4j                                stringtie
lcals                            py-pyani                               structure
lcms                             py-pyarrow                             strumpack
ldc                              py-pyasn1                              sublime-text
ldc-bootstrap                    py-pybigwig                            subread
legion                           py-pybind11                            subversion
leveldb                          py-pybtex                              suite-sparse
lftp                             py-pybtex-docutils                     sumaclust
libaec                           py-pycairo                             sundials
libaio                           py-pychecker                           superlu
libapplewm                       py-pycodestyle                         superlu-dist
libarchive                       py-pycparser                           superlu-mt
libassuan                        py-pycrypto                            supernova
libatomic-ops                    py-pycurl                              sw4lite
libbeagle                        py-pydatalog                           swap-assembler
libbeato                         py-pydispatcher                        swarm
libbsd                           py-pydot                               swfft
libbson                          py-pyelftools                          swiftsim
libcanberra                      py-pyepsg                              swig
libcap                           py-pyfasta                             symengine
libceed                          py-pyfftw                              sympol
libcerf                          py-pyflakes                            sz
libcheck                         py-pygdbmi                             tabix
libcint                          py-pygments                            talass
libcircle                        py-pygobject                           talloc
libconfig                        py-pygpu                               tantan
libcroco                         py-pygtk                               tar
libctl                           py-pylint                              targetp
libdivsufsort                    py-pymatgen                            task
libdmx                           py-pyminifier                          taskd
libdrm                           py-pymol                               tasmanian
libdwarf                         py-pympler                             tassel
libedit                          py-pymysql                             tau
libelf                           py-pynn                                tcl
libemos                          py-pypar                               tcl-itcl
libepoxy                         py-pyparsing                           tcl-tcllib
libev                            py-pypeflow                            tcl-tclxml
libevent                         py-pyprof2html                         tclap
libevpath                        py-pyqi                                tcoffee
libfabric                        py-pyqt                                tcptrace
libffi                           py-pyrad                               tcsh
libffs                           py-pysam                               tealeaf
libfontenc                       py-pyscaf                              templight
libfs                            py-pyserial                            templight-tools
libgcrypt                        py-pyshp                               tetgen
libgd                            py-pyside                              tethex
libgeotiff                       py-pysocks                             texinfo
libgit2                          py-pyspark                             texlive
libgpg-error                     py-pysqlite                            the-platinum-searcher
libgpuarray                      py-pytables                            the-silver-searcher
libgridxc                        py-pytest                              thornado-mini
libgtextutils                    py-pytest-cov                          thrift
libharu                          py-pytest-flake8                       thrust
libhio                           py-pytest-httpbin                      tig
libiberty                        py-pytest-mock                         tinyxml
libice                           py-pytest-runner                       tinyxml2
libiconv                         py-pytest-xdist                        tioga
libint                           py-python-daemon                       tk
libjpeg                          py-python-engineio                     tldd
libjpeg-turbo                    py-python-gitlab                       tmalign
libksba                          py-python-levenshtein                  tmhmm
liblbxutil                       py-python-socketio                     tmux
liblockfile                      py-pythonqwt                           tmuxinator
libmatheval                      py-pytorch                             tophat
libmaxminddb                     py-pytz                                tppred
libmesh                          py-pyutilib                            tracer
libmng                           py-pywavelets                          transabyss
libmongoc                        py-pyyaml                              transdecoder
libmonitor                       py-qtawesome                           transposome
libnbc                           py-qtconsole                           transset
libnl                            py-qtpy                                trapproto
libnova                          py-quantities                          tree
libogg                           py-quast                               treesub
liboldx                          py-radical-utils                       trf
libpcap                          py-ranger                              triangle
libpciaccess                     py-rasterio                            trilinos
libpfm4                          py-readme-renderer                     trimal
libpipeline                      py-regex                               trimgalore
libpng                           py-reportlab                           trimmomatic
libpsl                           py-requests                            trinity
libpthread-stubs                 py-requests-toolbelt                   trinotate
libquo                           py-restview                            trnascan-se
librom                           py-rope                                turbine
libsharp                         py-rpy2                                turbomole
libshm                           py-rsa                                 tut
libsigcpp                        py-rseqc                               twm
libsigsegv                       py-rtree                               tycho2
libsm                            py-saga-python                         typhon
libsodium                        py-scandir                             typhonio
libspatialindex                  py-scientificpython                    uberftp
libsplash                        py-scikit-image                        ucx
libssh                           py-scikit-learn                        udunits2
libssh2                          py-scipy                               ufo-core
libsvm                           py-seaborn                             ufo-filters
libszip                          py-setuptools                          umpire
libtermkey                       py-setuptools-git                      unblur
libtiff                          py-setuptools-scm                      uncrustify
libtool                          py-sfepy                               unibilium
libunistring                     py-sh                                  unifycr
libunwind                        py-shapely                             unison
libuuid                          py-shiboken                            units
libuv                            py-simplegeneric                       unixodbc
libvorbis                        py-simplejson                          unuran
libvterm                         py-singledispatch                      unzip
libwebsockets                    py-sip                                 usearch
libwindowswm                     py-six                                 util-linux
libx11                           py-slepc4py                            util-macros
libxau                           py-slurm-pipeline                      uuid
libxaw                           py-sncosmo                             valgrind
libxaw3d                         py-snowballstemmer                     vampirtrace
libxc                            py-snuggs                              vardictjava
libxcb                           py-spectra                             varscan
libxcomposite                    py-spefile                             vc
libxcursor                       py-spglib                              vcftools
libxdamage                       py-sphinx                              vcsh
libxdmcp                         py-sphinx-bootstrap-theme              vdt
libxevie                         py-sphinx-rtd-theme                    vecgeom
libxext                          py-sphinxcontrib-bibtex                veclibfort
libxfixes                        py-sphinxcontrib-programoutput         vegas2
libxfont                         py-sphinxcontrib-websupport            veloc
libxfont2                        py-spyder                              velvet
libxfontcache                    py-spykeutils                          verilator
libxft                           py-sqlalchemy                          verrou
libxi                            py-statsmodels                         videoproto
libxinerama                      py-stevedore                           viennarna
libxkbcommon                     py-storm                               viewres
libxkbfile                       py-subprocess32                        vim
libxkbui                         py-symengine                           virtualgl
libxml2                          py-symfit                              visit
libxmu                           py-sympy                               vizglow
libxp                            py-tabulate                            vmatch
libxpm                           py-tappy                               voropp
libxpresent                      py-terminado                           votca-csg
libxprintapputil                 py-testinfra                           votca-ctp
libxprintutil                    py-tetoolkit                           votca-tools
libxrandr                        py-theano                              votca-xtp
libxrender                       py-tifffile                            vpfft
libxres                          py-toml                                vpic
libxscrnsaver                    py-tomopy                              vsearch
libxshmfence                     py-toolz                               vt
libxslt                          py-tornado                             vtk
libxsmm                          py-tqdm                                vtkh
libxstream                       py-traceback2                          vtkm
libxt                            py-traitlets                           wannier90
libxtrap                         py-tuiview                             warpx
libxtst                          py-twisted                             wcslib
libxv                            py-typing                              wget
libxvmc                          py-tzlocal                             wgsim
libxxf86dga                      py-udunits                             windowswmproto
libxxf86misc                     py-umi-tools                           wireshark
libxxf86vm                       py-unittest2                           workrave
libyogrt                         py-unittest2py3k                       wt
libzip                           py-urllib3                             wx
lighttpd                         py-urwid                               wxpropgrid
likwid                           py-vcversioner                         x11perf
linkphase3                       py-virtualenv                          xapian-core
linux-headers                    py-virtualenv-clone                    xauth
listres                          py-virtualenvwrapper                   xbacklight
llvm                             py-vsc-base                            xbiff
llvm-openmp-ompt                 py-vsc-install                         xbitmaps
lmdb                             py-wcsaxes                             xbraid
lmod                             py-wcwidth                             xcalc
lndir                            py-webkit-server                       xcb-demo
log4cplus                        py-weblogo                             xcb-proto
log4cxx                          py-werkzeug                            xcb-util
loki                             py-wheel                               xcb-util-cursor
lordec                           py-widgetsnbextension                  xcb-util-errors
lrslib                           py-wrapt                               xcb-util-image
lrzip                            py-xarray                              xcb-util-keysyms
lsof                             py-xattr                               xcb-util-renderutil
ltrace                           py-xdot                                xcb-util-wm
lua                              py-xlrd                                xcb-util-xrm
lua-bitlib                       py-xlsxwriter                          xclip
lua-jit                          py-xmlrunner                           xclipboard
lua-lpeg                         py-xopen                               xclock
lua-luafilesystem                py-xpyb                                xcmiscproto
lua-luaposix                     py-xvfbwrapper                         xcmsdb
lua-mpack                        py-yamlreader                          xcompmgr
luit                             py-yapf                                xconsole
lulesh                           py-yt                                  xcursor-themes
lumpy-sv                         py-ytopt                               xcursorgen
lwgrp                            py-zmq                                 xdbedizzy
lwm2                             py-zope-event                          xditview
lz4                              py-zope-interface                      xdm
lzma                             pythia6                                xdpyinfo
lzo                              python                                 xdriinfo
m4                               qbank                                  xedit
macsio                           qbox                                   xerces-c
mad-numdiff                      qhull                                  xeus
mafft                            qmcpack                                xev
magics                           qmd-progress                           xextproto
magma                            qorts                                  xeyes
makedepend                       qrupdate                               xf86bigfontproto
mallocmc                         qt                                     xf86dga
man-db                           qt-creator                             xf86dgaproto
manta                            qtgraph                                xf86driproto
maq                              qthreads                               xf86miscproto
mariadb                          quantum-espresso                       xf86rushproto
masa                             quinoa                                 xf86vidmodeproto
masurca                          qwt                                    xfd
matio                            r                                      xfindproxy
matlab                           r-a4                                   xfontsel
maven                            r-a4base                               xfs
maverick                         r-a4classif                            xfsinfo
mawk                             r-a4core                               xfwp
mbedtls                          r-a4preproc                            xgamma
mc                               r-a4reporting                          xgc
mcl                              r-abadata                              xhmm
mdtest                           r-abaenrichment                        xhost
med                              r-abind                                xineramaproto
meep                             r-absseq                               xinit
mefit                            r-acde                                 xinput
megahit                          r-acepack                              xios
memaxes                          r-acgh                                 xkbcomp
meme                             r-acme                                 xkbdata
memkind                          r-ada                                  xkbevd
meraculous                       r-adabag                               xkbprint
mercurial                        r-ade4                                 xkbutils
mesa                             r-adegenet                             xkeyboard-config
mesa-glu                         r-adsplit                              xkill
meshkit                          r-aer                                  xload
meson                            r-affxparser                           xlogo
mesquite                         r-affy                                 xlsatoms
metabat                          r-affycomp                             xlsclients
metaphysicl                      r-affycompatible                       xlsfonts
metis                            r-affycontam                           xmag
mfem                             r-affycoretools                        xman
microbiomeutil                   r-affydata                             xmessage
minced                           r-affyexpress                          xmh
mindthegap                       r-affyilm                              xmlf90
miniaero                         r-affyio                               xmlto
miniamr                          r-affypdnn                             xmodmap
miniasm                          r-affyplm                              xmore
miniconda2                       r-affyqcreport                         xorg-cf-files
miniconda3                       r-affyrnadegradation                   xorg-docs
minife                           r-agdex                                xorg-gtest
minighost                        r-agilp                                xorg-server
minigmg                          r-agimicrorna                          xorg-sgml-doctools
minimap2                         r-aims                                 xphelloworld
minimd                           r-aldex2                               xplor-nih
miniqmc                          r-allelicimbalance                     xplsprinters
minisign                         r-alpine                               xpr
minismac2d                       r-als                                  xprehashprinterlist
minitri                          r-alsace                               xprop
minivite                         r-altcdfenvs                           xproto
minixyce                         r-amap                                 xproxymanagementprotocol
minuit                           r-ampliqueso                           xqilla
mira                             r-analysispageserver                   xrandr
mirdeep2                         r-anaquin                              xrdb
mitofates                        r-aneufinder                           xrefresh
mitos                            r-aneufinderdata                       xrootd
mkfontdir                        r-animation                            xrx
mkfontscale                      r-annaffy                              xsbench
mlhka                            r-annotate                             xscope
moab                             r-annotationdbi                        xsd
modern-wheel                     r-annotationfilter                     xsdk
mofem-cephas                     r-annotationforge                      xsdktrilinos
mofem-fracture-module            r-annotationhub                        xset
mofem-minimal-surface-equation   r-ape                                  xsetmode
mofem-users-modules              r-argparse                             xsetpointer
molcas                           r-assertthat                           xsetroot
mono                             r-backports                            xsimd
mosh                             r-bamsignals                           xsm
mothur                           r-base64                               xstdcmap
motif                            r-base64enc                            xtensor
motioncor2                       r-bbmisc                               xtensor-python
mount-point-attributes           r-beanplot                             xterm
mozjs                            r-bh                                   xtl
mpark-variant                    r-biasedurn                            xtrans
mpc                              r-bindr                                xtrap
mpe2                             r-bindrcpp                             xts
mpest                            r-biobase                              xvidtune
mpfr                             r-biocgenerics                         xvinfo
mpibash                          r-biocinstaller                        xwd
mpiblast                         r-biocparallel                         xwininfo
mpich                            r-biocstyle                            xwud
mpifileutils                     r-biom-utils                           xxhash
mpilander                        r-biomart                              xz
mpileaks                         r-biomformat                           yajl
mpip                             r-biostrings                           yambo
mpir                             r-biovizbase                           yaml-cpp
mpix-launch-swift                r-bit                                  yasm
mrbayes                          r-bit64                                yorick
mrnet                            r-bitops                               z3
mrtrix3                          r-blob                                 zeromq
mscgen                           r-bookdown                             zfp
msgpack-c                        r-boot                                 zip
mshadow                          r-brew                                 zlib
msmc                             r-broom                                zoltan
multitail                        r-bsgenome                             zsh
multiverso                       r-bumphunter                           zstd

The packages are listed by name in alphabetical order. A pattern to match with no wildcards, * or ?, will be treated as though it started and ended with *, so util is equivalent to *util*. All patterns will be treated as case-insensitive. You can also add the -d to search the description of the package in addition to the name. Some examples:

All packages whose names contain “sql”:

$ spack list sql
perl-dbd-mysql   postgresql   py-pymysql   py-sqlalchemy  r-rpostgresql  r-sqldf  sqlitebrowser
perl-dbd-sqlite  py-mysqldb1  py-pysqlite  r-rmysql       r-rsqlite      sqlite

All packages whose names or descriptions contain documentation:

$ spack list --search-description documentation
compositeproto     libxfixes     py-docutils                  r-ggplot2   r-stanheaders
damageproto        libxpresent   py-epydoc                    r-quadprog  sowing
double-conversion  man-db        py-markdown                  r-rcpp      texinfo
doxygen            perl-dbfile   py-sphinx                    r-rinside   xorg-docs
gflags             py-alabaster  py-sphinxcontrib-websupport  r-roxygen2  xorg-sgml-doctools

spack info

To get more information on a particular package from spack list, use spack info. Just supply the name of a package:

$ spack info mpich
AutotoolsPackage:   mpich

Description:
    MPICH is a high performance and widely portable implementation of the
    Message Passing Interface (MPI) standard.

Homepage: http://www.mpich.org

Tags: 
    None

Preferred version:  
    3.2.1      http://www.mpich.org/static/downloads/3.2.1/mpich-3.2.1.tar.gz

Safe versions:  
    develop    [git] https://github.com/pmodels/mpich.git
    3.2.1      http://www.mpich.org/static/downloads/3.2.1/mpich-3.2.1.tar.gz
    3.2        http://www.mpich.org/static/downloads/3.2/mpich-3.2.tar.gz
    3.1.4      http://www.mpich.org/static/downloads/3.1.4/mpich-3.1.4.tar.gz
    3.1.3      http://www.mpich.org/static/downloads/3.1.3/mpich-3.1.3.tar.gz
    3.1.2      http://www.mpich.org/static/downloads/3.1.2/mpich-3.1.2.tar.gz
    3.1.1      http://www.mpich.org/static/downloads/3.1.1/mpich-3.1.1.tar.gz
    3.1        http://www.mpich.org/static/downloads/3.1/mpich-3.1.tar.gz
    3.0.4      http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz

Variants:
    Name [Default]    Allowed values        Description


    device [ch3]      ch3, ch4              Abstract Device Interface
                                            (ADI) implementation. The ch4
                                            device is currently in
                                            experimental state
    hydra [on]        True, False           Build the hydra process
                                            manager
    netmod [tcp]      tcp, mxm, ofi, ucx    Network module. Only single
                                            netmod builds are supported.
                                            For ch3 device configurations,
                                            this presumes the ch3:nemesis
                                            communication channel.
                                            ch3:sock is not supported by
                                            this spack package at this
                                            time.
    pmi [on]          True, False           Build with PMI support
    romio [on]        True, False           Enable ROMIO MPI I/O
                                            implementation
    verbs [off]       True, False           Build support for OpenFabrics
                                            verbs.

Installation Phases:
    autoreconf    configure    build    install

Build Dependencies:
    findutils  libfabric

Link Dependencies:
    libfabric

Run Dependencies:
    None

Virtual Packages: 
    mpich@3: provides mpi@:3.0
    mpich@1: provides mpi@:1.3
    mpich provides mpi

Most of the information is self-explanatory. The safe versions are versions that Spack knows the checksum for, and it will use the checksum to verify that these versions download without errors or viruses.

Dependencies and virtual dependencies are described in more detail later.

spack versions

To see more available versions of a package, run spack versions. For example:

$ spack versions libelf
==> Safe versions (already checksummed):
  0.8.13  0.8.12
==> Remote versions (not yet checksummed):
  0.8.11  0.8.10  0.8.9  0.8.8  0.8.7  0.8.6  0.8.5  0.8.4  0.8.3  0.8.2  0.8.0  0.7.0  0.6.4  0.5.2

There are two sections in the output. Safe versions are versions for which Spack has a checksum on file. It can verify that these versions are downloaded correctly.

In many cases, Spack can also show you what versions are available out on the web—these are remote versions. Spack gets this information by scraping it directly from package web pages. Depending on the package and how its releases are organized, Spack may or may not be able to find remote versions.

Installing and uninstalling

spack install

spack install will install any package shown by spack list. For example, To install the latest version of the mpileaks package, you might type this:

$ spack install mpileaks

If mpileaks depends on other packages, Spack will install the dependencies first. It then fetches the mpileaks tarball, expands it, verifies that it was downloaded without errors, builds it, and installs it in its own directory under $SPACK_ROOT/opt. You’ll see a number of messages from spack, a lot of build output, and a message that the packages is installed:

$ spack install mpileaks
==> Installing mpileaks
==> mpich is already installed in ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpich@3.0.4.
==> callpath is already installed in ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/callpath@1.0.2-5dce4318.
==> adept-utils is already installed in ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/adept-utils@1.0-5adef8da.
==> Trying to fetch from https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
######################################################################## 100.0%
==> Staging archive: ~/spack/var/spack/stage/mpileaks@1.0%gcc@4.4.7 arch=linux-debian7-x86_64-59f6ad23/mpileaks-1.0.tar.gz
==> Created stage in ~/spack/var/spack/stage/mpileaks@1.0%gcc@4.4.7 arch=linux-debian7-x86_64-59f6ad23.
==> No patches needed for mpileaks.
==> Building mpileaks.

... build output ...

==> Successfully installed mpileaks.
  Fetch: 2.16s.  Build: 9.82s.  Total: 11.98s.
[+] ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpileaks@1.0-59f6ad23

The last line, with the [+], indicates where the package is installed.

Building a specific version

Spack can also build specific versions of a package. To do this, just add @ after the package name, followed by a version:

$ spack install mpich@3.0.4

Any number of versions of the same package can be installed at once without interfering with each other. This is good for multi-user sites, as installing a version that one user needs will not disrupt existing installations for other users.

In addition to different versions, Spack can customize the compiler, compile-time options (variants), compiler flags, and platform (for cross compiles) of an installation. Spack is unique in that it can also configure the dependencies a package is built with. For example, two configurations of the same version of a package, one built with boost 1.39.0, and the other version built with version 1.43.0, can coexist.

This can all be done on the command line using the spec syntax. Spack calls the descriptor used to refer to a particular package configuration a spec. In the commands above, mpileaks and mpileaks@3.0.4 are both valid specs. We’ll talk more about how you can use them to customize an installation in Specs & dependencies.

spack uninstall

To uninstall a package, type spack uninstall <package>. This will ask the user for confirmation before completely removing the directory in which the package was installed.

$ spack uninstall mpich

If there are still installed packages that depend on the package to be uninstalled, spack will refuse to uninstall it.

To uninstall a package and every package that depends on it, you may give the --dependents option.

$ spack uninstall --dependents mpich

will display a list of all the packages that depend on mpich and, upon confirmation, will uninstall them in the right order.

A command like

$ spack uninstall mpich

may be ambiguous if multiple mpich configurations are installed. For example, if both mpich@3.0.2 and mpich@3.1 are installed, mpich could refer to either one. Because it cannot determine which one to uninstall, Spack will ask you either to provide a version number to remove the ambiguity or use the --all option to uninstall all of the matching packages.

You may force uninstall a package with the --force option

$ spack uninstall --force mpich

but you risk breaking other installed packages. In general, it is safer to remove dependent packages before removing their dependencies or use the --dependents option.

Non-Downloadable Tarballs

The tarballs for some packages cannot be automatically downloaded by Spack. This could be for a number of reasons:

  1. The author requires users to manually accept a license agreement before downloading (jdk and galahad).
  2. The software is proprietary and cannot be downloaded on the open Internet.

To install these packages, one must create a mirror and manually add the tarballs in question to it (see Mirrors):

  1. Create a directory for the mirror. You can create this directory anywhere you like, it does not have to be inside ~/.spack:

    $ mkdir ~/.spack/manual_mirror
    
  2. Register the mirror with Spack by creating ~/.spack/mirrors.yaml:

    mirrors:
      manual: file://~/.spack/manual_mirror
    
  3. Put your tarballs in it. Tarballs should be named <package>/<package>-<version>.tar.gz. For example:

    $ ls -l manual_mirror/galahad
    
    -rw-------. 1 me me 11657206 Jun 21 19:25 galahad-2.60003.tar.gz
    
  4. Install as usual:

    $ spack install galahad
    

Seeing installed packages

We know that spack list shows you the names of available packages, but how do you figure out which are already installed?

spack find

spack find shows the specs of installed packages. A spec is like a name, but it has a version, compiler, architecture, and build options associated with it. In spack, you can have many installations of the same package with different specs.

Running spack find with no arguments lists installed packages:

$ spack find
==> 74 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
ImageMagick@6.8.9-10  libdwarf@20130729  py-dateutil@2.4.0
adept-utils@1.0       libdwarf@20130729  py-ipython@2.3.1
atk@2.14.0            libelf@0.8.12      py-matplotlib@1.4.2
boost@1.55.0          libelf@0.8.13      py-nose@1.3.4
bzip2@1.0.6           libffi@3.1         py-numpy@1.9.1
cairo@1.14.0          libmng@2.0.2       py-pygments@2.0.1
callpath@1.0.2        libpng@1.6.16      py-pyparsing@2.0.3
cmake@3.0.2           libtiff@4.0.3      py-pyside@1.2.2
dbus@1.8.6            libtool@2.4.2      py-pytz@2014.10
dbus@1.9.0            libxcb@1.11        py-setuptools@11.3.1
dyninst@8.1.2         libxml2@2.9.2      py-six@1.9.0
fontconfig@2.11.1     libxml2@2.9.2      python@2.7.8
freetype@2.5.3        llvm@3.0           qhull@1.0
gdk-pixbuf@2.31.2     memaxes@0.5        qt@4.8.6
glib@2.42.1           mesa@8.0.5         qt@5.4.0
graphlib@2.0.0        mpich@3.0.4        readline@6.3
gtkplus@2.24.25       mpileaks@1.0       sqlite@3.8.5
harfbuzz@0.9.37       mrnet@4.1.0        stat@2.1.0
hdf5@1.8.13           ncurses@5.9        tcl@8.6.3
icu@54.1              netcdf@4.3.3       tk@src
jpeg@9a               openssl@1.0.1h     vtk@6.1.0
launchmon@1.0.1       pango@1.36.8       xcb-proto@1.11
lcms@2.6              pixman@0.32.6      xz@5.2.0
libdrm@2.4.33         py-dateutil@2.4.0  zlib@1.2.8

-- linux-debian7-x86_64 / gcc@4.9.2 --------------------------------
libelf@0.8.10  mpich@3.0.4

Packages are divided into groups according to their architecture and compiler. Within each group, Spack tries to keep the view simple, and only shows the version of installed packages.

spack find can filter the package list based on the package name, spec, or a number of properties of their installation status. For example, missing dependencies of a spec can be shown with --missing, packages which were explicitly installed with spack install <package> can be singled out with --explicit and those which have been pulled in only as dependencies with --implicit.

In some cases, there may be different configurations of the same version of a package installed. For example, there are two installations of libdwarf@20130729 above. We can look at them in more detail using spack find --deps, and by asking only to show libdwarf packages:

$ spack find --deps libdwarf
==> 2 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
    libdwarf@20130729-d9b90962
        ^libelf@0.8.12
    libdwarf@20130729-b52fac98
        ^libelf@0.8.13

Now we see that the two instances of libdwarf depend on different versions of libelf: 0.8.12 and 0.8.13. This view can become complicated for packages with many dependencies. If you just want to know whether two packages’ dependencies differ, you can use spack find --long:

$ spack find --long libdwarf
==> 2 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
libdwarf@20130729-d9b90962  libdwarf@20130729-b52fac98

Now the libdwarf installs have hashes after their names. These are hashes over all of the dependencies of each package. If the hashes are the same, then the packages have the same dependency configuration.

If you want to know the path where each package is installed, you can use spack find --paths:

$ spack find --paths
==> 74 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
    ImageMagick@6.8.9-10  ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/ImageMagick@6.8.9-10-4df950dd
    adept-utils@1.0       ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/adept-utils@1.0-5adef8da
    atk@2.14.0            ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/atk@2.14.0-3d09ac09
    boost@1.55.0          ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/boost@1.55.0
    bzip2@1.0.6           ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/bzip2@1.0.6
    cairo@1.14.0          ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/cairo@1.14.0-fcc2ab44
    callpath@1.0.2        ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/callpath@1.0.2-5dce4318
...

And, finally, you can restrict your search to a particular package by supplying its name:

$ spack find --paths libelf
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
    libelf@0.8.11  ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/libelf@0.8.11
    libelf@0.8.12  ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/libelf@0.8.12
    libelf@0.8.13  ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/libelf@0.8.13

spack find actually does a lot more than this. You can use specs to query for specific configurations and builds of each package. If you want to find only libelf versions greater than version 0.8.12, you could say:

$ spack find libelf@0.8.12:
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
    libelf@0.8.12  libelf@0.8.13

Finding just the versions of libdwarf built with a particular version of libelf would look like this:

$ spack find --long libdwarf ^libelf@0.8.12
==> 1 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
libdwarf@20130729-d9b90962

We can also search for packages that have a certain attribute. For example, spack find libdwarf +debug will show only installations of libdwarf with the ‘debug’ compile-time option enabled.

The full spec syntax is discussed in detail in Specs & dependencies.

Specs & dependencies

We know that spack install, spack uninstall, and other commands take a package name with an optional version specifier. In Spack, that descriptor is called a spec. Spack uses specs to refer to a particular build configuration (or configurations) of a package. Specs are more than a package name and a version; you can use them to specify the compiler, compiler version, architecture, compile options, and dependency options for a build. In this section, we’ll go over the full syntax of specs.

Here is an example of a much longer spec than we’ve seen thus far:

mpileaks @1.2:1.4 %gcc@4.7.5 +debug -qt arch=bgq_os ^callpath @1.1 %gcc@4.7.2

If provided to spack install, this will install the mpileaks library at some version between 1.2 and 1.4 (inclusive), built using gcc at version 4.7.5 for the Blue Gene/Q architecture, with debug options enabled, and without Qt support. Additionally, it says to link it with the callpath library (which it depends on), and to build callpath with gcc 4.7.2. Most specs will not be as complicated as this one, but this is a good example of what is possible with specs.

More formally, a spec consists of the following pieces:

  • Package name identifier (mpileaks above)
  • @ Optional version specifier (@1.2:1.4)
  • % Optional compiler specifier, with an optional compiler version (gcc or gcc@4.7.3)
  • + or - or ~ Optional variant specifiers (+debug, -qt, or ~qt) for boolean variants
  • name=<value> Optional variant specifiers that are not restricted to boolean variants
  • name=<value> Optional compiler flag specifiers. Valid flag names are cflags, cxxflags, fflags, cppflags, ldflags, and ldlibs.
  • target=<value> os=<value> Optional architecture specifier (target=haswell os=CNL10)
  • ^ Dependency specs (^callpath@1.1)

There are two things to notice here. The first is that specs are recursively defined. That is, each dependency after ^ is a spec itself. The second is that everything is optional except for the initial package name identifier. Users can be as vague or as specific as they want about the details of building packages, and this makes spack good for beginners and experts alike.

To really understand what’s going on above, we need to think about how software is structured. An executable or a library (these are generally the artifacts produced by building software) depends on other libraries in order to run. We can represent the relationship between a package and its dependencies as a graph. Here is the full dependency graph for mpileaks:

digraph { mpileaks -> mpich mpileaks -> callpath -> mpich callpath -> dyninst dyninst -> libdwarf -> libelf dyninst -> libelf }

Each box above is a package and each arrow represents a dependency on some other package. For example, we say that the package mpileaks depends on callpath and mpich. mpileaks also depends indirectly on dyninst, libdwarf, and libelf, in that these libraries are dependencies of callpath. To install mpileaks, Spack has to build all of these packages. Dependency graphs in Spack have to be acyclic, and the depends on relationship is directional, so this is a directed, acyclic graph or DAG.

The package name identifier in the spec is the root of some dependency DAG, and the DAG itself is implicit. Spack knows the precise dependencies among packages, but users do not need to know the full DAG structure. Each ^ in the full spec refers to some dependency of the root package. Spack will raise an error if you supply a name after ^ that the root does not actually depend on (e.g. mpileaks ^emacs@23.3).

Spack further simplifies things by only allowing one configuration of each package within any single build. Above, both mpileaks and callpath depend on mpich, but mpich appears only once in the DAG. You cannot build an mpileaks version that depends on one version of mpich and on a callpath version that depends on some other version of mpich. In general, such a configuration would likely behave unexpectedly at runtime, and Spack enforces this to ensure a consistent runtime environment.

The point of specs is to abstract this full DAG from Spack users. If a user does not care about the DAG at all, she can refer to mpileaks by simply writing mpileaks. If she knows that mpileaks indirectly uses dyninst and she wants a particular version of dyninst, then she can refer to mpileaks ^dyninst@8.1. Spack will fill in the rest when it parses the spec; the user only needs to know package names and minimal details about their relationship.

When spack prints out specs, it sorts package names alphabetically to normalize the way they are displayed, but users do not need to worry about this when they write specs. The only restriction on the order of dependencies within a spec is that they appear after the root package. For example, these two specs represent exactly the same configuration:

mpileaks ^callpath@1.0 ^libelf@0.8.3
mpileaks ^libelf@0.8.3 ^callpath@1.0

You can put all the same modifiers on dependency specs that you would put on the root spec. That is, you can specify their versions, compilers, variants, and architectures just like any other spec. Specifiers are associated with the nearest package name to their left. For example, above, @1.1 and %gcc@4.7.2 associates with the callpath package, while @1.2:1.4, %gcc@4.7.5, +debug, -qt, and target=haswell os=CNL10 all associate with the mpileaks package.

In the diagram above, mpileaks depends on mpich with an unspecified version, but packages can depend on other packages with constraints by adding more specifiers. For example, mpileaks could depend on mpich@1.2: if it can only build with version 1.2 or higher of mpich.

Below are more details about the specifiers that you can add to specs.

Version specifier

A version specifier comes somewhere after a package name and starts with @. It can be a single version, e.g. @1.0, @3, or @1.2a7. Or, it can be a range of versions, such as @1.0:1.5 (all versions between 1.0 and 1.5, inclusive). Version ranges can be open, e.g. :3 means any version up to and including 3. This would include 3.4 and 3.4.2. 4.2: means any version above and including 4.2. Finally, a version specifier can be a set of arbitrary versions, such as @1.0,1.5,1.7 (1.0, 1.5, or 1.7). When you supply such a specifier to spack install, it constrains the set of versions that Spack will install.

If the version spec is not provided, then Spack will choose one according to policies set for the particular spack installation. If the spec is ambiguous, i.e. it could match multiple versions, Spack will choose a version within the spec’s constraints according to policies set for the particular Spack installation.

Details about how versions are compared and how Spack determines if one version is less than another are discussed in the developer guide.

Compiler specifier

A compiler specifier comes somewhere after a package name and starts with %. It tells Spack what compiler(s) a particular package should be built with. After the % should come the name of some registered Spack compiler. This might include gcc, or intel, but the specific compilers available depend on the site. You can run spack compilers to get a list; more on this below.

The compiler spec can be followed by an optional compiler version. A compiler version specifier looks exactly like a package version specifier. Version specifiers will associate with the nearest package name or compiler specifier to their left in the spec.

If the compiler spec is omitted, Spack will choose a default compiler based on site policies.

Variants

Variants are named options associated with a particular package. They are optional, as each package must provide default values for each variant it makes available. Variants can be specified using a flexible parameter syntax name=<value>. For example, spack install libelf debug=True will install libelf build with debug flags. The names of particular variants available for a package depend on what was provided by the package author. spack info <package> will provide information on what build variants are available.

For compatibility with earlier versions, variants which happen to be boolean in nature can be specified by a syntax that represents turning options on and off. For example, in the previous spec we could have supplied libelf +debug with the same effect of enabling the debug compile time option for the libelf package.

Depending on the package a variant may have any default value. For libelf here, debug is False by default, and we turned it on with debug=True or +debug. If a variant is True by default you can turn it off by either adding -name or ~name to the spec.

There are two syntaxes here because, depending on context, ~ and - may mean different things. In most shells, the following will result in the shell performing home directory substitution:

mpileaks ~debug   # shell may try to substitute this!
mpileaks~debug    # use this instead

If there is a user called debug, the ~ will be incorrectly expanded. In this situation, you would want to write libelf -debug. However, - can be ambiguous when included after a package name without spaces:

mpileaks-debug     # wrong!
mpileaks -debug    # right

Spack allows the - character to be part of package names, so the above will be interpreted as a request for the mpileaks-debug package, not a request for mpileaks built without debug options. In this scenario, you should write mpileaks~debug to avoid ambiguity.

When spack normalizes specs, it prints them out with no spaces boolean variants using the backwards compatibility syntax and uses only ~ for disabled boolean variants. The - and spaces on the command line are provided for convenience and legibility.

Compiler Flags

Compiler flags are specified using the same syntax as non-boolean variants, but fulfill a different purpose. While the function of a variant is set by the package, compiler flags are used by the compiler wrappers to inject flags into the compile line of the build. Additionally, compiler flags are inherited by dependencies. spack install libdwarf cppflags="-g" will install both libdwarf and libelf with the -g flag injected into their compile line.

Notice that the value of the compiler flags must be quoted if it contains any spaces. Any of cppflags=-O3, cppflags="-O3", cppflags='-O3', and cppflags="-O3 -fPIC" are acceptable, but cppflags=-O3 -fPIC is not. Additionally, if they value of the compiler flags is not the last thing on the line, it must be followed by a space. The commmand spack install libelf cppflags="-O3"%intel will be interpreted as an attempt to set cppflags=”-O3%intel”`.

The six compiler flags are injected in the order of implicit make commands in GNU Autotools. If all flags are set, the order is $cppflags $cflags|$cxxflags $ldflags <command> $ldlibs for C and C++ and $fflags $cppflags $ldflags <command> $ldlibs for Fortran.

Compiler environment variables and additional RPATHs

In the exceptional case a compiler requires setting special environment variables, like an explicit library load path. These can bet set in an extra section in the compiler configuration (the supported environment modification commands are: set, unset, append-path, and prepend-path). The user can also specify additional RPATHs that the compiler will add to all executables generated by that compiler. This is useful for forcing certain compilers to RPATH their own runtime libraries, so that executables will run without the need to set LD_LIBRARY_PATH.

compilers:
  - compiler:
      spec: gcc@4.9.3
      paths:
        cc: /opt/gcc/bin/gcc
        c++: /opt/gcc/bin/g++
        f77: /opt/gcc/bin/gfortran
        fc: /opt/gcc/bin/gfortran
      environment:
        unset:
          BAD_VARIABLE: # The colon is required but the value must be empty
        set:
          GOOD_VARIABLE_NUM: 1
          GOOD_VARIABLE_STR: good
        prepend-path:
          PATH: /path/to/binutils
        append-path:
          LD_LIBRARY_PATH: /opt/gcc/lib
      extra_rpaths:
      - /path/to/some/compiler/runtime/directory
      - /path/to/some/other/compiler/runtime/directory

Note

The section environment is interpreted as an ordered dictionary, which means two things. First, environment modification are applied in the order they are specified in the configuration file. Second, you cannot express environment modifications that require mixing different commands, i.e. you cannot set one variable, than prepend-path to another one, and than again set a third one.

Architecture specifiers

The architecture can be specified by using the reserved words target and/or os (target=x86-64 os=debian7). You can also use the triplet form of platform, operating system and processor.

$ spack install libelf arch=cray-CNL10-haswell

Users on non-Cray systems won’t have to worry about specifying the architecture. Spack will autodetect what kind of operating system is on your machine as well as the processor. For more information on how the architecture can be used on Cray machines, see Spack on Cray

Virtual dependencies

The dependence graph for mpileaks we saw above wasn’t quite accurate. mpileaks uses MPI, which is an interface that has many different implementations. Above, we showed mpileaks and callpath depending on mpich, which is one particular implementation of MPI. However, we could build either with another implementation, such as openmpi or mvapich.

Spack represents interfaces like this using virtual dependencies. The real dependency DAG for mpileaks looks like this:

digraph { mpi [color=red] mpileaks -> mpi mpileaks -> callpath -> mpi callpath -> dyninst dyninst -> libdwarf -> libelf dyninst -> libelf }

Notice that mpich has now been replaced with mpi. There is no real MPI package, but some packages provide the MPI interface, and these packages can be substituted in for mpi when mpileaks is built.

You can see what virtual packages a particular package provides by getting info on it:

$ spack info mpich
AutotoolsPackage:   mpich

Description:
    MPICH is a high performance and widely portable implementation of the
    Message Passing Interface (MPI) standard.

Homepage: http://www.mpich.org

Tags: 
    None

Preferred version:  
    3.2.1      http://www.mpich.org/static/downloads/3.2.1/mpich-3.2.1.tar.gz

Safe versions:  
    develop    [git] https://github.com/pmodels/mpich.git
    3.2.1      http://www.mpich.org/static/downloads/3.2.1/mpich-3.2.1.tar.gz
    3.2        http://www.mpich.org/static/downloads/3.2/mpich-3.2.tar.gz
    3.1.4      http://www.mpich.org/static/downloads/3.1.4/mpich-3.1.4.tar.gz
    3.1.3      http://www.mpich.org/static/downloads/3.1.3/mpich-3.1.3.tar.gz
    3.1.2      http://www.mpich.org/static/downloads/3.1.2/mpich-3.1.2.tar.gz
    3.1.1      http://www.mpich.org/static/downloads/3.1.1/mpich-3.1.1.tar.gz
    3.1        http://www.mpich.org/static/downloads/3.1/mpich-3.1.tar.gz
    3.0.4      http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz

Variants:
    Name [Default]    Allowed values        Description


    device [ch3]      ch3, ch4              Abstract Device Interface
                                            (ADI) implementation. The ch4
                                            device is currently in
                                            experimental state
    hydra [on]        True, False           Build the hydra process
                                            manager
    netmod [tcp]      tcp, mxm, ofi, ucx    Network module. Only single
                                            netmod builds are supported.
                                            For ch3 device configurations,
                                            this presumes the ch3:nemesis
                                            communication channel.
                                            ch3:sock is not supported by
                                            this spack package at this
                                            time.
    pmi [on]          True, False           Build with PMI support
    romio [on]        True, False           Enable ROMIO MPI I/O
                                            implementation
    verbs [off]       True, False           Build support for OpenFabrics
                                            verbs.

Installation Phases:
    autoreconf    configure    build    install

Build Dependencies:
    findutils  libfabric

Link Dependencies:
    libfabric

Run Dependencies:
    None

Virtual Packages: 
    mpich@3: provides mpi@:3.0
    mpich@1: provides mpi@:1.3
    mpich provides mpi

Spack is unique in that its virtual packages can be versioned, just like regular packages. A particular version of a package may provide a particular version of a virtual package, and we can see above that mpich versions 1 and above provide all mpi interface versions up to 1, and mpich versions 3 and above provide mpi versions up to 3. A package can depend on a particular version of a virtual package, e.g. if an application needs MPI-2 functions, it can depend on mpi@2: to indicate that it needs some implementation that provides MPI-2 functions.

Constraining virtual packages

When installing a package that depends on a virtual package, you can opt to specify the particular provider you want to use, or you can let Spack pick. For example, if you just type this:

$ spack install mpileaks

Then spack will pick a provider for you according to site policies. If you really want a particular version, say mpich, then you could run this instead:

$ spack install mpileaks ^mpich

This forces spack to use some version of mpich for its implementation. As always, you can be even more specific and require a particular mpich version:

$ spack install mpileaks ^mpich@3

The mpileaks package in particular only needs MPI-1 commands, so any MPI implementation will do. If another package depends on mpi@2 and you try to give it an insufficient MPI implementation (e.g., one that provides only mpi@:1), then Spack will raise an error. Likewise, if you try to plug in some package that doesn’t provide MPI, Spack will raise an error.

Specifying Specs by Hash

Complicated specs can become cumbersome to enter on the command line, especially when many of the qualifications are necessary to distinguish between similar installs. To avoid this, when referencing an existing spec, Spack allows you to reference specs by their hash. We previously discussed the spec hash that Spack computes. In place of a spec in any command, substitute /<hash> where <hash> is any amount from the beginning of a spec hash.

For example, lets say that you accidentally installed two different mvapich2 installations. If you want to uninstall one of them but don’t know what the difference is, you can run:

$ spack find --long mvapich2
==> 2 installed packages.
-- linux-centos7-x86_64 / gcc@6.3.0 ----------
qmt35td mvapich2@2.2%gcc
er3die3 mvapich2@2.2%gcc

You can then uninstall the latter installation using:

$ spack uninstall /er3die3

Or, if you want to build with a specific installation as a dependency, you can use:

$ spack install trilinos ^/er3die3

If the given spec hash is sufficiently long as to be unique, Spack will replace the reference with the spec to which it refers. Otherwise, it will prompt for a more qualified hash.

Note that this will not work to reinstall a dependency uninstalled by spack uninstall --force.

spack providers

You can see what packages provide a particular virtual package using spack providers. If you wanted to see what packages provide mpi, you would just run:

$ spack providers mpi
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:         mpich      mvapich2        openmpi@2.0.0:
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:         mpich@1:   openmpi         spectrum-mpi
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  intel-mpi              mpich@3:   openmpi@1.6.5
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  intel-parallel-studio  mpilander  openmpi@1.7.5:

And if you only wanted to see packages that provide MPI-2, you would add a version specifier to the spec:

$ spack providers mpi@2
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:         mpich      openmpi         spectrum-mpi
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:         mpich@3:   openmpi@1.6.5
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  intel-mpi              mpilander  openmpi@1.7.5:
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  intel-parallel-studio  mvapich2   openmpi@2.0.0:

Notice that the package versions that provide insufficient MPI versions are now filtered out.

Extensions & Python support

Spack’s installation model assumes that each package will live in its own install prefix. However, certain packages are typically installed within the directory hierarchy of other packages. For example, modules in interpreted languages like Python are typically installed in the $prefix/lib/python-2.7/site-packages directory.

Spack has support for this type of installation as well. In Spack, a package that can live inside the prefix of another package is called an extension. Suppose you have Python installed like so:

$ spack find python
==> 1 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
python@2.7.8

spack extensions

You can find extensions for your Python installation like this:

$ spack extensions python
==> python@2.7.8%gcc@4.4.7 arch=linux-debian7-x86_64-703c7a96
==> 36 extensions:
geos          py-ipython     py-pexpect    py-pyside            py-sip
py-basemap    py-libxml2     py-pil        py-pytz              py-six
py-biopython  py-mako        py-pmw        py-rpy2              py-sympy
py-cython     py-matplotlib  py-pychecker  py-scientificpython  py-virtualenv
py-dateutil   py-mpi4py      py-pygments   py-scikit-learn
py-epydoc     py-mx          py-pylint     py-scipy
py-gnuplot    py-nose        py-pyparsing  py-setuptools
py-h5py       py-numpy       py-pyqt       py-shiboken

==> 12 installed:
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
py-dateutil@2.4.0    py-nose@1.3.4       py-pyside@1.2.2
py-dateutil@2.4.0    py-numpy@1.9.1      py-pytz@2014.10
py-ipython@2.3.1     py-pygments@2.0.1   py-setuptools@11.3.1
py-matplotlib@1.4.2  py-pyparsing@2.0.3  py-six@1.9.0

==> None activated.

The extensions are a subset of what’s returned by spack list, and they are packages like any other. They are installed into their own prefixes, and you can see this with spack find --paths:

$ spack find --paths py-numpy
==> 1 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
    py-numpy@1.9.1  ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/py-numpy@1.9.1-66733244

However, even though this package is installed, you cannot use it directly when you run python:

$ spack load python
$ python
Python 2.7.8 (default, Feb 17 2015, 01:35:25)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named numpy
>>>

Using Extensions

There are three ways to get numpy working in Python. The first is to use Using module files via Spack. You can simply use or load the module for the extension, and it will be added to the PYTHONPATH in your current shell.

For tcl modules:

$ spack load python
$ spack load py-numpy

or, for dotkit:

$ spack use python
$ spack use py-numpy

Now import numpy will succeed for as long as you keep your current session open.

Activating Extensions in a View

The second way to use extensions is to create a view, which merges the python installation along with the extensions into a single prefix. See Filesystem Views for a more in-depth description of views and spack view for usage of the spack view command.

Activating Extensions Globally

As an alternative to creating a merged prefix with Python and its extensions, and prior to support for views, Spack has provided a means to install the extension into the Spack installation prefix for the extendee. This has typically been useful since extendable packages typically search their own installation path for addons by default.

Global activations are performed with the spack activate command:

spack activate

$ spack activate py-numpy
==> Activated extension py-setuptools@11.3.1%gcc@4.4.7 arch=linux-debian7-x86_64-3c74eb69 for python@2.7.8%gcc@4.4.7.
==> Activated extension py-nose@1.3.4%gcc@4.4.7 arch=linux-debian7-x86_64-5f70f816 for python@2.7.8%gcc@4.4.7.
==> Activated extension py-numpy@1.9.1%gcc@4.4.7 arch=linux-debian7-x86_64-66733244 for python@2.7.8%gcc@4.4.7.

Several things have happened here. The user requested that py-numpy be activated in the python installation it was built with. Spack knows that py-numpy depends on py-nose and py-setuptools, so it activated those packages first. Finally, once all dependencies were activated in the python installation, py-numpy was activated as well.

If we run spack extensions again, we now see the three new packages listed as activated:

$ spack extensions python
==> python@2.7.8%gcc@4.4.7  arch=linux-debian7-x86_64-703c7a96
==> 36 extensions:
geos          py-ipython     py-pexpect    py-pyside            py-sip
py-basemap    py-libxml2     py-pil        py-pytz              py-six
py-biopython  py-mako        py-pmw        py-rpy2              py-sympy
py-cython     py-matplotlib  py-pychecker  py-scientificpython  py-virtualenv
py-dateutil   py-mpi4py      py-pygments   py-scikit-learn
py-epydoc     py-mx          py-pylint     py-scipy
py-gnuplot    py-nose        py-pyparsing  py-setuptools
py-h5py       py-numpy       py-pyqt       py-shiboken

==> 12 installed:
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
py-dateutil@2.4.0    py-nose@1.3.4       py-pyside@1.2.2
py-dateutil@2.4.0    py-numpy@1.9.1      py-pytz@2014.10
py-ipython@2.3.1     py-pygments@2.0.1   py-setuptools@11.3.1
py-matplotlib@1.4.2  py-pyparsing@2.0.3  py-six@1.9.0

==> 3 currently activated:
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
py-nose@1.3.4  py-numpy@1.9.1  py-setuptools@11.3.1

Now, when a user runs python, numpy will be available for import without the user having to explicitly loaded. python@2.7.8 now acts like a system Python installation with numpy installed inside of it.

Spack accomplishes this by symbolically linking the entire prefix of the py-numpy into the prefix of the python package. To the python interpreter, it looks like numpy is installed in the site-packages directory.

The only limitation of global activation is that you can only have a single version of an extension activated at a time. This is because multiple versions of the same extension would conflict if symbolically linked into the same prefix. Users who want a different version of a package can still get it by using environment modules or views, but they will have to explicitly load their preferred version.

spack activate --force

If, for some reason, you want to activate a package without its dependencies, you can use spack activate --force:

$ spack activate --force py-numpy
==> Activated extension py-numpy@1.9.1%gcc@4.4.7 arch=linux-debian7-x86_64-66733244 for python@2.7.8%gcc@4.4.7.

spack deactivate

We’ve seen how activating an extension can be used to set up a default version of a Python module. Obviously, you may want to change that at some point. spack deactivate is the command for this. There are several variants:

  • spack deactivate <extension> will deactivate a single extension. If another activated extension depends on this one, Spack will warn you and exit with an error.

  • spack deactivate --force <extension> deactivates an extension regardless of packages that depend on it.

  • spack deactivate --all <extension> deactivates an extension and all of its dependencies. Use --force to disregard dependents.

  • spack deactivate --all <extendee> deactivates all activated extensions of a package. For example, to deactivate all python extensions, use:

    $ spack deactivate --all python
    

Filesystem requirements

By default, Spack needs to be run from a filesystem that supports flock locking semantics. Nearly all local filesystems and recent versions of NFS support this, but parallel filesystems or NFS volumes may be configured without flock support enabled. You can determine how your filesystems are mounted with mount. The output for a Lustre filesystem might look like this:

$ mount | grep lscratch
mds1-lnet0@o2ib100:/lsd on /p/lscratchd type lustre (rw,nosuid,lazystatfs,flock)
mds2-lnet0@o2ib100:/lse on /p/lscratche type lustre (rw,nosuid,lazystatfs,flock)

Note the flock option on both Lustre mounts.

If you do not see this or a similar option for your filesystem, you have a few options. First, you can move your Spack installation to a filesystem that supports locking. Second, you could ask your system administrator to enable flock for your filesystem.

If none of those work, you can disable locking in one of two ways:

  1. Run Spack with the -L or --disable-locks option to disable locks on a call-by-call basis.
  2. Edit config.yaml and set the locks option to false to always disable locking.

Warning

If you disable locking, concurrent instances of Spack will have no way to avoid stepping on each other. You must ensure that there is only one instance of Spack running at a time. Otherwise, Spack may end up with a corrupted database file, or you may not be able to see all installed packages in commands like spack find.

If you are unfortunate enough to run into this situation, you may be able to fix it by running spack reindex.

This issue typically manifests with the error below:

$ ./spack find
Traceback (most recent call last):
File "./spack", line 176, in <module>
  main()
File "./spack", line 154,' in main
  return_val = command(parser, args)
File "./spack/lib/spack/spack/cmd/find.py", line 170, in find
  specs = set(spack.installed_db.query(\**q_args))
File "./spack/lib/spack/spack/database.py", line 551, in query
  with self.read_transaction():
File "./spack/lib/spack/spack/database.py", line 598, in __enter__
  if self._enter() and self._acquire_fn:
File "./spack/lib/spack/spack/database.py", line 608, in _enter
  return self._db.lock.acquire_read(self._timeout)
File "./spack/lib/spack/llnl/util/lock.py", line 103, in acquire_read
  self._lock(fcntl.LOCK_SH, timeout)   # can raise LockError.
File "./spack/lib/spack/llnl/util/lock.py", line 64, in _lock
  fcntl.lockf(self._fd, op | fcntl.LOCK_NB)
IOError: [Errno 38] Function not implemented

A nicer error message is TBD in future versions of Spack.

Getting Help

spack help

If you don’t find what you need here, the help subcommand will print out out a list of all of spack’s options and subcommands:

$ spack help
usage: spack [-hkV] [--color {always,never,auto}] COMMAND ...

A flexible package manager that supports multiple versions,
configurations, platforms, and compilers.

These are common spack commands:

query packages:
  list                  list and search available packages
  info                  get detailed information on a particular package
  find                  list and search installed packages

build packages:
  install               build and install packages
  uninstall             remove installed packages
  spec                  show what would be installed, given a spec

environments:
  env                   manage virtual environments
  view                  produce a single-rooted directory view of packages

modules:
  load                  add package to environment using `module load`
  module                manipulate module files
  unload                remove package from environment using `module unload`

create packages:
  create                create a new package file
  edit                  open package files in $EDITOR

system:
  arch                  print architecture information about this machine
  compilers             list available compilers

optional arguments:
  -h, --help            show this help message and exit
  -k, --insecure        do not check ssl certificates when downloading
  -V, --version         show version number and exit
  --color {always,never,auto}
                        when to colorize output (default: auto)

more help:
  spack help --all       list all commands and options
  spack help <command>   help on a specific command
  spack help --spec      help on the spec syntax
  spack docs             open http://spack.rtfd.io/ in a browser

Adding an argument, e.g. spack help <subcommand>, will print out usage information for a particular subcommand:

$ spack help install
usage: spack install [-hInvy] [--only {package,dependencies}] [-j JOBS] [--overwrite] [--keep-prefix] [--keep-stage]
                     [--dont-restage] [--use-cache | --no-cache] [--show-log-on-error] [--source] [--fake]
                     [--only-concrete] [-f SPEC_YAML_FILE] [--clean | --dirty] [--test {root,all} | --run-tests]
                     [--log-format {None,cdash,junit}] [--log-file LOG_FILE] [--cdash-upload-url CDASH_UPLOAD_URL]
                     ...

build and install packages

positional arguments:
  package               spec of the package to install

optional arguments:
  -h, --help            show this help message and exit
  --only {package,dependencies}
                        select the mode of installation.
                        the default is to install the package along with all its dependencies.
                        alternatively one can decide to install only the package or only
                        the dependencies
  -j JOBS, --jobs JOBS  explicitly set number of make jobs, default is #cpus.
  -I, --install-status  show install status of packages. packages can be: installed [+], missing and needed by an installed package [-], or not installed (no annotation)
  --overwrite           reinstall an existing spec, even if it has dependents
  --keep-prefix         don't remove the install prefix if installation fails
  --keep-stage          don't remove the build stage if installation succeeds
  --dont-restage        if a partial install is detected, don't delete prior state
  --use-cache           check for pre-built Spack packages in mirrors (default)
  --no-cache            do not check for pre-built Spack packages in mirrors
  --show-log-on-error   print full build log to stderr if build fails
  --source              install source files in prefix
  -n, --no-checksum     do not use checksums to verify downloadeded files (unsafe)
  -v, --verbose         display verbose build output while installing
  --fake                fake install for debug purposes.
  --only-concrete       (with environment) only install already concretized specs
  -f SPEC_YAML_FILE, --file SPEC_YAML_FILE
                        install from file. Read specs to install from .yaml files
  --clean               unset harmful variables in the build environment (default)
  --dirty               preserve user environment in the spack build environment (danger!)
  --test {root,all}     If 'root' is chosen, run package tests during
                        installation for top-level packages (but skip tests for dependencies).
                        if 'all' is chosen, run package tests during installation for all
                        packages. If neither are chosen, don't run tests for any packages.
  --run-tests           run package tests during installation (same as --test=all)
  --log-format {None,cdash,junit}
                        format to be used for log files
  --log-file LOG_FILE   filename for the log file. if not passed a default will be used
  --cdash-upload-url CDASH_UPLOAD_URL
                        CDash URL where reports will be uploaded
  -y, --yes-to-all      assume "yes" is the answer to every confirmation request

Alternately, you can use spack --help in place of spack help, or spack <subcommand> --help to get help on a particular subcommand.