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

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-mysqldb1  py-sqlalchemy  r-rmysql  r-rpostgresql  r-rsqlite  r-sqldf  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] git://github.com/pmodels/mpich
    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:
    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 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:
        set:
          LD_LIBRARY_PATH : /opt/gcc/lib
      extra_rpaths:
      - /path/to/some/compiler/runtime/directory
      - /path/to/some/other/compiler/runtime/directory

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] git://github.com/pmodels/mpich
    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:
    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
intel-mpi              mpich     mpich@3:  openmpi        openmpi@1.7.5:  spectrum-mpi
intel-parallel-studio  mpich@1:  mvapich2  openmpi@1.6.5  openmpi@2.0.0:

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
intel-mpi              mpich     mvapich2  openmpi@1.6.5   openmpi@2.0.0:
intel-parallel-studio  mpich@3:  openmpi   openmpi@1.7.5:  spectrum-mpi

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
>>>

Extensions & Environment Modules

There are two 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

It is often desirable to have certain packages always available as part of a Python installation. Spack offers a more permanent solution for this case. Instead of requiring users to load particular environment modules, you can activate the package within the Python installation:

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 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, 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

Spack currently 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 may be mounted without flock support enabled. You can determine how your filesystems are mounted with mount -p. The output for a Lustre filesystem might look like this:

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

Note the flock option on both Lustre mounts. If you do not see this or a similar option for your filesystem, you may need ot ask your system administrator to enable flock.

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

environment:
  load                  add package to environment using `module load`
  module                manipulate module files
  unload                remove package from environment using `module unload`
  view                  produce a single-rooted directory view of packages

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 available commands
  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 [-hnvy] [--only {package,dependencies}] [-j JOBS] [--overwrite] [--keep-prefix] [--keep-stage]
                     [--dont-restage] [--use-cache] [--show-log-on-error] [--source] [--fake] [-f SPEC_YAML_FILE]
                     [--clean | --dirty] [--test {root,all} | --run-tests] [--log-format {junit}]
                     [--log-file LOG_FILE]
                     ...

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  explicitely set number of make jobs. default is #cpus
  --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
  --show-log-on-error   print full build log to stderr if build fails
  --source              install source files in prefix
  -n, --no-checksum     do not check packages against checksum
  -v, --verbose         display verbose build output while installing
  --fake                fake install for debug purposes.
  -f SPEC_YAML_FILE, --file SPEC_YAML_FILE
                        install from file. Read specs to install from .yaml files
  --clean               sanitize the environment from variables that can affect how  packages find libraries or headers
  --dirty               maintain the current environment without trying to sanitize it
  --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 {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
  -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.