Tutorial setup
If you have not done the prior sections, you’ll need to start the docker image:
docker run -it ghcr.io/spack/tutorial:hpcic26
and then set Spack up like this:
git clone --depth=2 --branch=releases/v1.2 https://github.com/spack/spack
. spack/share/spack/setup-env.sh
spack mirror add --unsigned tutorial /mirror
spack bootstrap now
spack compiler find
See the Basic Installation Tutorial for full details on setup.
For more help, join us in the #tutorial channel on Slack – get an invitation at slack.spack.io
Scripting with Spack¶
This tutorial introduces advanced scripting features available in Spack, using the spack find and spack python commands.
We’ve already seen how to list and search installed packages with spack find.
The spack python command allows us to write more complex queries, as it gives access to all of Spack’s internal APIs.
Since Spack has an extensive API, we’ll only scratch the surface here.
Scripting with spack find¶
The output we’ve seen from spack find has been for human consumption.
We can take advantage of the command’s advanced features to generate machine-readable output suitable for piping to a script.
spack find --format¶
The main function of spack find is to display concrete specs that correspond to installed packages.
By default, they are shown with default attributes, like the @version suffix.
The --format argument allows us to display the specs using custom format strings.
Suppose we only want to see the name, version, and first ten (10) characters of the hash for every package installed in the Spack instance. This output can be generated with the following command:
$ spack find --format "{name} {version} {hash:10}"
adept-utils 1.0.1 naehq6ldod llvm 21.1.8 px4mv6leqp
autoconf 2.72 jo3eg4rjvu lmod 8.7.67 wf22jsggn5
automake 1.18.1 yhkgfaibmq lua 5.4.8 q66mudlsap
berkeley-db 18.1.40 27d4iypuci lua-luafilesystem 1.9.0 su5b2hsgwg
binutils 2.46.1 6ene6zrpqg lua-luaposix 36.3 egzwtikjsf
boost 1.72.0 52pdqqjhv3 lwgrp 1.0.6 vce7blyslk
bzip2 1.0.8 cbtgjrhpwi lz4 1.10.0 ozuoqp53ae
bzip2 1.0.8 5kv66tqcv6 m4 1.4.21 y6uqrtoi6s
callpath 1.0.4 xksxwmqijj macsio 1.1 4x6m3h66yg
cmake 3.31.11 a4wqsr7jgu macsio 1.1 mwcffrktix
compiler-wrapper 1.1.0 mmywg7x4my mpc 1.4.1 gxmoxea2jy
curl 8.20.0 j2fa7xlzdv mpfr 4.2.2 melg7gafko
dtcmp 1.1.5 cjk3tolu6w mpich 5.0.1 xkilhym6dn
dyninst 13.0.0 kurk3h3kbs mpich 5.0.1 fxetsgw62g
elfutils 0.194 qqik7au6w4 munge 0.5.18 2rzdjfo4s3
expat 2.8.1 d462mhwofp ncurses 6.6 ekvivpvwxp
expat 2.8.1 kqm2d3gvvu ncurses 6.6 romubi25ey
file 5.46 mguwetco63 netlib-lapack 3.12.1 77mpzq52bk
findutils 4.10.0 punbqrxx5v netlib-scalapack 2.2.3 ugsrem2k5c
gcc 14.3.0 5zrvmb3qx7 netlib-scalapack 2.2.3 y2obsoclpu
gcc 15.2.0 cl66sen4hs netlib-scalapack 2.2.3 6twt5ypw7p
gcc 15.2.0 yjlog5xxyg netlib-scalapack 2.2.3 faqiqu4wbw
gcc 16.1.0 hkkcdmj2gu nghttp2 1.67.1 4lyasazukl
gcc-runtime 15.2.0 yhhe2wecmh numactl 2.0.19 2t2useutfy
gcc-runtime 15.2.0 xm76mt35el numactl 2.0.19 vn7wvoehm2
gcc-runtime 16.1.0 nn3xbub7zh openblas 0.3.33 7kdghmrs2g
gdbm 1.26 cq4dkucz57 openblas 0.3.33 uh2kn3ctzg
gdbm 1.26 2qw4v6642b openmpi 5.0.10 qfut5qqwp2
gettext 1.0 sle3ix4niz openmpi 5.0.10 s6hcsd5arf
gettext 1.0 qdxpkom3wt openssh 10.3p1 m6yx5j3src
glib 2.88.1 6jow2egi2l openssh 10.3p1 plgdjpahip
glibc 2.43 ublhg653t6 openssl 3.6.1 33yozp5l5c
glibc 2.43 yc4n2ppjkm openssl 3.6.1 mladgc5eep
gmake 4.4.1 cdyuto2vcd pcre2 10.44 hxboy227go
gmake 4.4.1 r4lhaokbvy pdsh 2.35 42p3mgwu44
gmp 6.3.0 xpmsy5xffe perl 5.42.0 bvphs3b3ja
hdf5 1.14.6 as6mmcjwjl pigz 2.8 afklka7uur
hdf5 1.14.6 7cwv3stkmk pigz 2.8 7ppidiedss
hdf5 1.14.6 jceyzq7qva pkgconf 2.5.1 yvl6jpilvk
hwloc 2.13.0 ujctyeyjzv pmix 6.1.0 ycyqykw634
hwloc 2.13.0 fkki5gmowq pmix 6.1.0 2vgljh5yyo
intel-tbb 2023.0.0 tf2gxcsr5v prrte 4.1.0 nldxmxwkhu
json-c 0.18 wzb5pq2lxt prrte 4.1.0 wwm2ix6ijb
json-cwx 0.12 vluhg4wrbf py-numpy 2.4.6 gvvfhjhkhi
kokkos 5.1.1 kpwomw3oxg py-pybind11 3.0.2 jv2364qenp
kokkos-kernels 5.1.1 ml3q3dq5ch py-scipy 1.17.1 s2p5dpl2sr
krb5 1.22.2 ldqeqfwa76 python 3.14.5 derywaqkj5
krb5 1.22.2 7a4l5v5nat python 3.14.5 vuoqpmohlx
less 692 ohmdb2lfmv python-venv 1.0 j76kyd42la
libbsd 0.12.2 7o3mv6c3do python-venv 1.0 iyp4dooj6g
libbsd 0.12.2 2zdnupjtph readline 8.3 k25xiihp5d
libdwarf 2.3.0 rji2bticj7 readline 8.3 teh56foom4
libedit 3.1-20251016 uwyh3xy52r scr 2.0.0 bdhwshgs2z
libedit 3.1-20251016 4binz2pyum scr 2.0.0 fzyxmihh5a
libevent 2.1.12 oopqoagvk4 silo 4.12.0 lw4y63zl33
libevent 2.1.12 ul3skjateb slurm 25-05-1-1 yg45f3qjki
libfabric 2.5.1 itb4a2swgf sqlite 3.53.1 unjd5day6p
libfabric 2.5.1 o3dcvlbnly sqlite 3.53.1 qy73hymb6h
libffi 3.5.2 aiceoszqyf tar 1.35 f5xe4pxauj
libffi 3.5.2 pkl6qupano tar 1.35 u62ty4dsid
libgcrypt 1.12.2 ksohnknooj tcl 8.6.17 d4ibosbgfm
libgpg-error 1.61 qxxesj62dd trilinos 17.1.1 66pfqb7gv7
libiberty 2.46.0 ftcprn47kv trilinos 17.1.1 i3pydqndbu
libiconv 1.18 vbwvgwxvjr unzip 6.0 4qgksuyoha
libiconv 1.18 xrsocgcig7 util-linux-uuid 2.41 clufswxoi5
libmd 1.1.0 yvvn7mur5p util-linux-uuid 2.41 2wcnb6nky3
libmd 1.1.0 ypuui7vsqi xz 5.8.3 hhjyyqygxt
libpciaccess 0.17 qzkk5ymbu3 xz 5.8.3 rrvhelyvar
libpciaccess 0.17 t5frspjun7 zlib-ng 2.0.7 aeoqp4ey2p
libsigsegv 2.15 phcmfqkiob zlib-ng 2.3.3 g72d7i3bvg
libtool 2.5.4 3gdq456dec zlib-ng 2.3.3 gc236khsrb
libxcrypt 4.5.2 bkzcu2s2hn zlib-ng 2.3.3 5dji3nxkz5
libxcrypt 4.5.2 aca7p7lojt zlib-ng 2.3.3 t7jnrlgayh
libxml2 2.15.3 ujlg2uai6q zlib-ng 2.3.3 6l3ycpy4cr
libxml2 2.15.3 3rlsf7j7jg zstd 1.5.7 63aruxky3a
libyogrt 1.35 dv2btw3jwr zstd 1.5.7 mzuiikvvru
Note that name, version, and hash are attributes of Spack’s internal Spec object and enclosing them in braces ensures they are output according to the format string.
spack find --format can be combined with typical command line tools like sort or uniq to retrieve information relevant to specific workflows.
spack find --json¶
Alternatively, we can get a serialized version of Spec objects in the JSON format using the --json option.
For example, to get attributes for all installations of zlib-ng:
$ spack find --json zlib-ng
This command provides complete information about any spec of interest in a structured format.
The output of spack find --json can be piped to JSON filtering tools like jq to extract specific information.
Visit basic usage docs for more examples.
Introducing the spack python command¶
What if we need to perform more advanced queries?
Spack provides the spack python command to launch an interpreter with Spack’s Python modules available to import.
The underlying Python instance is used for all other commands.
We can write scripts to:
run Spack commands
explore abstract and concretized specs
directly access other internal components of Spack
Let’s launch a Spack-aware Python interpreter by entering:
$ spack python
exit()
Spack version 1.2.1
Python 3.14.5, Linux x86_64
>>> exit()
now exiting InteractiveConsole...
As we are in a Python interpreter, use exit() to end the session and return to the terminal.
Accessing the Spec object¶
Let’s take a look at the internal representation of the Spack Spec.
As previously mentioned, specs can be either abstract or concrete.
The specs we’ve seen in package.py files (e.g., in the install() method) have been concrete, or fully specified.
Specs typed on the command line have been abstract.
Understanding the differences between the two types is key to using Spack’s internal API.
Let’s open another Python interpreter with spack python, instantiate the zlib spec, and check a few properties of an abstract spec:
>>> from spack.spec import Spec
>>> zlib = Spec('zlib target=x86_64_v3')
>>> zlib.concrete
False
>>> zlib.version
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/spack/spack/lib/spack/spack/spec.py", line 3166, in version
raise SpecError("Spec version is not concrete: " + str(self))
spack.error.SpecError: Spec version is not concrete: zlib target=x86_64_v3
>>> zlib.versions
[:]
>>> str(zlib.architecture)
'None-None-x86_64_v3'
Notice that there are Spec properties and methods not accessible to abstract specs; specifically:
an exception –
SpecError– is raised if we try to access itsversionthere are no associated
versionsthe spec’s operating system is
None
Without exiting the interpreter, let’s concretize the spec and try again:
>>> from spack.concretize import concretize_one
>>> zlib_concrete = spack.concretize.concretize_one(zlib)
>>> zlib_concrete.concrete
True
>>> zlib_concrete.version
Version("1.3.2")
>>> zlib_concrete.versions
[Version("1.3.2")]
>>> str(zlib_concrete.architecture)
'linux-ubuntu26.04-x86_64_v3'
Notice that the concretized spec now:
has a
versionhas a single entry in its
versionslistthe operating system is now
ubuntu22.04
Querying the Spack database¶
More powerful queries are available when we look at the information stored in the Spack database.
The Database object in Spack is in the spack.store.STORE.db variable.
We’ll interact with it mainly through the query() method.
Let’s see the documentation available for query() using Python’s built-in help() function:
>>> import spack.store
>>> help(spack.store.STORE.db.query)
Help on method query in module spack.database:
query(query_spec: Union[str, ForwardRef('spack.spec.Spec'), NoneType] = None, *, predicate_fn: Optional[Callable[[spack.database.InstallRecord], bool]] = None, installed: Union[bool, spack.enums.InstallRecordStatus] = True, explicit: Optional[bool] = None, start_date: Optional[datetime.datetime] = None, end_date: Optional[datetime.datetime] = None, in_buildcache: Optional[bool] = None, hashes: Optional[List[str]] = None, origin: Optional[str] = None, install_tree: str = 'all') -> List[ForwardRef('spack.spec.Spec')] method of spack.database.Database instance
Queries the Spack database including all upstream databases.
Args:
query_spec: if query_spec is ``None``, match all specs in the database.
If it is a spec, return all specs matching ``spec.satisfies(query_spec)``.
predicate_fn: optional predicate taking an InstallRecord as argument, and returning
whether that record is selected for the query. It can be used to craft criteria
that need some data for selection not provided by the Database itself.
installed: if ``True``, includes only installed specs in the search. If ``False`` only
missing specs, and if ``any``, all specs in database. If an InstallStatus or
iterable of InstallStatus, returns specs whose install status matches at least
one of the InstallStatus.
explicit: a spec that was installed following a specific user request is marked as
explicit. If instead it was pulled-in as a dependency of a user requested spec
it's considered implicit.
start_date: if set considers only specs installed from the starting date.
end_date: if set considers only specs installed until the ending date.
in_buildcache: specs that are marked in this database as part of an associated binary
cache are ``in_buildcache``. All other specs are not. This field is used for
querying mirror indices. By default, it does not check this status.
hashes: list of hashes used to restrict the search
install_tree: query 'all' (default), 'local', 'upstream', or upstream path
origin: origin of the spec
(END)
We’ll primarily make use of the query_spec argument.
Recall that spack find is limited to queries of attributes with matching values.
It cannot be used to find packages that do not meet a specific condition.
We can use the Python interface to write these types of queries.
For example, let’s find all packages that were compiled with gcc but do not depend on mpich.
We can do this by using custom Python code and Spack database queries.
We will use the spack.cmd.display_specs for output to achieve the same printing functionality as the spack find command:
>>> gcc_query_spec = Spec('%gcc')
>>> gcc_specs = spack.store.STORE.db.query(gcc_query_spec)
>>> result = [spec for spec in gcc_specs if not spec.satisfies('^mpich')]
>>> import spack.cmd
>>> spack.cmd.display_specs(result)
-- linux-ubuntu26.04-x86_64_v3 / gcc@15.2.0 -------------------------
autoconf@2.72 gdbm@1.23 libsigsegv@2.14 perl@5.38.0
automake@1.16.5 gettext@0.22.5 libtool@2.4.7 pigz@2.8
berkeley-db@18.1.40 glibc@2.35 libxcrypt@4.4.35 pkgconf@2.2.0
bison@3.8.2 gmake@4.4.1 libxml2@2.10.3 pmix@5.0.1
bzip2@1.0.8 hdf5@1.14.3 m4@1.4.19 readline@8.2
ca-certificates-mozilla@2023-05-30 hwloc@2.9.1 ncurses@6.5 tar@1.34
cmake@3.27.9 krb5@1.20.1 nghttp2@1.57.0 util-macros@1.19.3
curl@8.7.1 libedit@3.1-20230828 numactl@2.0.14 xz@5.4.6
diffutils@3.10 libevent@2.1.12 openmpi@5.0.3 zlib-ng@2.1.6
findutils@4.9.0 libiconv@1.17 openssh@9.7p1 zstd@1.5.6
gcc-runtime@11.4.0 libpciaccess@0.17 openssl@3.3.0
Now we have a powerful query not available through spack find.
Exit the interpreter to return to the command line:
>>> exit()
before generalizing the functionality for reuse.
Using scripts¶
Next, the script can be updated to accept arguments from the command line. By generalizing the script to take include and exclude specs as arguments, it becomes a flexible, general-purpose query tool.
Open a file called find_exclude.py in a text editor and add the following code:
from spack.spec import Spec
import spack.store
import spack.cmd
import sys
include_spec = Spec(sys.argv[1])
exclude_spec = Spec(sys.argv[2])
all_included = spack.store.STORE.db.query(include_spec)
result = [spec for spec in all_included if not spec.satisfies(exclude_spec)]
spack.cmd.display_specs(result)
We added importing and using the system package (sys) to access the first and second command line arguments.
Now we can run our new script by entering the following:
$ spack python find_exclude.py %gcc ^mpich
-- linux-ubuntu26.04-x86_64_v3 / %c,cxx,fortran=gcc@15.2.0 ------
mpich@5.0.1 openmpi@5.0.10 scr@2.0.0 trilinos@17.1.1
openblas@0.3.33 scr@2.0.0 silo@4.12.0
-- linux-ubuntu26.04-x86_64_v3 / %c,cxx,fortran=gcc@16.1.0 ------
mpich@5.0.1 openblas@0.3.33 openmpi@5.0.10 py-scipy@1.17.1
-- linux-ubuntu26.04-x86_64_v3 / %c,cxx=gcc@15.2.0 --------------
adept-utils@1.0.1 dyninst@13.0.0 hwloc@2.13.0 m4@1.4.21 python@3.14.5
berkeley-db@18.1.40 elfutils@0.194 intel-tbb@2023.0.0 macsio@1.1 tcl@8.6.17
binutils@2.46.1 expat@2.8.1 krb5@1.22.2 macsio@1.1 zlib-ng@2.0.7
boost@1.72.0 gcc@16.1.0 libdwarf@2.3.0 ncurses@6.6 zlib-ng@2.3.3
callpath@1.0.4 gettext@1.0 libffi@3.5.2 nghttp2@1.67.1 zlib-ng@2.3.3
cmake@3.31.11 glib@2.88.1 libiberty@2.46.0 openssh@10.3p1 zlib-ng@2.3.3
curl@8.20.0 gmp@6.3.0 lz4@1.10.0 openssl@3.6.1 zstd@1.5.7
-- linux-ubuntu26.04-x86_64_v3 / %c,cxx=gcc@16.1.0 --------------
expat@2.8.1 hwloc@2.13.0 libffi@3.5.2 openssh@10.3p1 py-numpy@2.4.6 zlib-ng@2.3.3
gettext@1.0 krb5@1.22.2 ncurses@6.6 openssl@3.6.1 python@3.14.5 zstd@1.5.7
-- linux-ubuntu26.04-x86_64_v3 / %c,fortran=gcc@15.2.0 ----------
libyogrt@1.35
-- linux-ubuntu26.04-x86_64_v3 / %c,fortran=gcc@16.1.0 ----------
netlib-lapack@3.12.1 netlib-scalapack@2.2.3 netlib-scalapack@2.2.3
-- linux-ubuntu26.04-x86_64_v3 / %c=gcc@15.2.0 ------------------
automake@1.18.1 libbsd@0.12.2 lmod@8.7.67 pkgconf@2.5.1
bzip2@1.0.8 libedit@3.1-20251016 lua@5.4.8 pmix@6.1.0
dtcmp@1.1.5 libevent@2.1.12 lua-luafilesystem@1.9.0 prrte@4.1.0
file@5.46 libfabric@2.5.1 lua-luaposix@36.3 readline@8.3
findutils@4.10.0 libgcrypt@1.12.2 lwgrp@1.0.6 slurm@25-05-1-1
gdbm@1.26 libgpg-error@1.61 mpc@1.4.1 sqlite@3.53.1
gmake@4.4.1 libiconv@1.18 mpfr@4.2.2 tar@1.35
gmake@4.4.1 libmd@1.1.0 munge@0.5.18 unzip@6.0
hdf5@1.14.6 libpciaccess@0.17 numactl@2.0.19 util-linux-uuid@2.41
hdf5@1.14.6 libsigsegv@2.15 pcre2@10.44 xz@5.8.3
json-c@0.18 libtool@2.5.4 pdsh@2.35
json-cwx@0.12 libxcrypt@4.5.2 perl@5.42.0
less@692 libxml2@2.15.3 pigz@2.8
-- linux-ubuntu26.04-x86_64_v3 / %c=gcc@16.1.0 ------------------
bzip2@1.0.8 libevent@2.1.12 libpciaccess@0.17 pigz@2.8 sqlite@3.53.1
gdbm@1.26 libfabric@2.5.1 libxcrypt@4.5.2 pmix@6.1.0 tar@1.35
libbsd@0.12.2 libiconv@1.18 libxml2@2.15.3 prrte@4.1.0 util-linux-uuid@2.41
libedit@3.1-20251016 libmd@1.1.0 numactl@2.0.19 readline@8.3 xz@5.8.3
-- linux-ubuntu26.04-x86_64_v3 / %cxx=gcc@15.2.0 ----------------
kokkos@5.1.1 kokkos-kernels@5.1.1
-- linux-ubuntu26.04-x86_64_v3 / %cxx=gcc@16.1.0 ----------------
py-pybind11@3.0.2
-- linux-ubuntu26.04-x86_64_v3 / no compilers -------------------
gcc-runtime@15.2.0 gcc-runtime@15.2.0 gcc-runtime@16.1.0
This works well, as long as we remember to use Spack’s python command to run it.
Using the spack-python executable¶
What if the script needs to be shared with others, without requiring them to remember to use spack python?
This can be done by adding a shebang line as the first line of the Python script, which allows it to be run as an executable. However, there is an important limitation to be aware of, as shown in the next example.
Open the find_exclude.py script we created above and add the shebang line with spack python as the arguments to env:
#!/usr/bin/env spack python
from spack.spec import Spec
import spack.store
import spack.cmd
import sys
include_spec = Spec(sys.argv[1])
exclude_spec = Spec(sys.argv[2])
all_included = spack.store.STORE.db.query(include_spec)
result = [spec for spec in all_included if not spec.satisfies(exclude_spec)]
spack.cmd.display_specs(result)
Exit the editor and add execute permissions to the script before running it as follows:
$ chmod u+x find_exclude.py
$ ./find_exclude.py %gcc ^mpich
env: 'spack python': Permission denied
If we’re lucky, it ran successfully, but there’s no guarantee this will work for every system.
Some systems only support a single argument on the shebang line (see here).
spack-python, which is a wrapper script for spack python, solves this issue.
Bring up the file in the editor again and change the env argument to spack-python as follows:
#!/usr/bin/env spack-python
from spack.spec import Spec
import spack.store
import spack.cmd
import sys
include_spec = Spec(sys.argv[1])
exclude_spec = Spec(sys.argv[2])
all_included = spack.store.STORE.db.query(include_spec)
result = [spec for spec in all_included if not spec.satisfies(exclude_spec)]
spack.cmd.display_specs(result)
Exit the editor and run the script again:
$ ./find_exclude.py %gcc ^mpich
-- linux-ubuntu26.04-x86_64_v3 / %c,cxx,fortran=gcc@15.2.0 ------
mpich@5.0.1 openmpi@5.0.10 scr@2.0.0 trilinos@17.1.1
openblas@0.3.33 scr@2.0.0 silo@4.12.0
-- linux-ubuntu26.04-x86_64_v3 / %c,cxx,fortran=gcc@16.1.0 ------
mpich@5.0.1 openblas@0.3.33 openmpi@5.0.10 py-scipy@1.17.1
-- linux-ubuntu26.04-x86_64_v3 / %c,cxx=gcc@15.2.0 --------------
adept-utils@1.0.1 dyninst@13.0.0 hwloc@2.13.0 m4@1.4.21 python@3.14.5
berkeley-db@18.1.40 elfutils@0.194 intel-tbb@2023.0.0 macsio@1.1 tcl@8.6.17
binutils@2.46.1 expat@2.8.1 krb5@1.22.2 macsio@1.1 zlib-ng@2.0.7
boost@1.72.0 gcc@16.1.0 libdwarf@2.3.0 ncurses@6.6 zlib-ng@2.3.3
callpath@1.0.4 gettext@1.0 libffi@3.5.2 nghttp2@1.67.1 zlib-ng@2.3.3
cmake@3.31.11 glib@2.88.1 libiberty@2.46.0 openssh@10.3p1 zlib-ng@2.3.3
curl@8.20.0 gmp@6.3.0 lz4@1.10.0 openssl@3.6.1 zstd@1.5.7
-- linux-ubuntu26.04-x86_64_v3 / %c,cxx=gcc@16.1.0 --------------
expat@2.8.1 hwloc@2.13.0 libffi@3.5.2 openssh@10.3p1 py-numpy@2.4.6 zlib-ng@2.3.3
gettext@1.0 krb5@1.22.2 ncurses@6.6 openssl@3.6.1 python@3.14.5 zstd@1.5.7
-- linux-ubuntu26.04-x86_64_v3 / %c,fortran=gcc@15.2.0 ----------
libyogrt@1.35
-- linux-ubuntu26.04-x86_64_v3 / %c,fortran=gcc@16.1.0 ----------
netlib-lapack@3.12.1 netlib-scalapack@2.2.3 netlib-scalapack@2.2.3
-- linux-ubuntu26.04-x86_64_v3 / %c=gcc@15.2.0 ------------------
automake@1.18.1 libbsd@0.12.2 lmod@8.7.67 pkgconf@2.5.1
bzip2@1.0.8 libedit@3.1-20251016 lua@5.4.8 pmix@6.1.0
dtcmp@1.1.5 libevent@2.1.12 lua-luafilesystem@1.9.0 prrte@4.1.0
file@5.46 libfabric@2.5.1 lua-luaposix@36.3 readline@8.3
findutils@4.10.0 libgcrypt@1.12.2 lwgrp@1.0.6 slurm@25-05-1-1
gdbm@1.26 libgpg-error@1.61 mpc@1.4.1 sqlite@3.53.1
gmake@4.4.1 libiconv@1.18 mpfr@4.2.2 tar@1.35
gmake@4.4.1 libmd@1.1.0 munge@0.5.18 unzip@6.0
hdf5@1.14.6 libpciaccess@0.17 numactl@2.0.19 util-linux-uuid@2.41
hdf5@1.14.6 libsigsegv@2.15 pcre2@10.44 xz@5.8.3
json-c@0.18 libtool@2.5.4 pdsh@2.35
json-cwx@0.12 libxcrypt@4.5.2 perl@5.42.0
less@692 libxml2@2.15.3 pigz@2.8
-- linux-ubuntu26.04-x86_64_v3 / %c=gcc@16.1.0 ------------------
bzip2@1.0.8 libevent@2.1.12 libpciaccess@0.17 pigz@2.8 sqlite@3.53.1
gdbm@1.26 libfabric@2.5.1 libxcrypt@4.5.2 pmix@6.1.0 tar@1.35
libbsd@0.12.2 libiconv@1.18 libxml2@2.15.3 prrte@4.1.0 util-linux-uuid@2.41
libedit@3.1-20251016 libmd@1.1.0 numactl@2.0.19 readline@8.3 xz@5.8.3
-- linux-ubuntu26.04-x86_64_v3 / %cxx=gcc@15.2.0 ----------------
kokkos@5.1.1 kokkos-kernels@5.1.1
-- linux-ubuntu26.04-x86_64_v3 / %cxx=gcc@16.1.0 ----------------
py-pybind11@3.0.2
-- linux-ubuntu26.04-x86_64_v3 / no compilers -------------------
gcc-runtime@15.2.0 gcc-runtime@15.2.0 gcc-runtime@16.1.0
It will now work on any system with Spack installed.
With these tools, we can create custom Spack queries and prototype new ideas. Contributions that improve or extend common Spack workflows are always welcome in the community.