Source code for spack.cmd.unload

# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

import os
import sys

import spack.cmd
import spack.error
import spack.user_environment as uenv
import spack.util.environment
from spack.cmd.common import arguments

description = "remove package from the user environment"
section = "user environment"
level = "short"


[docs] def setup_parser(subparser): """Parser is only constructed so that this prints a nice help message with -h.""" arguments.add_common_arguments(subparser, ["installed_specs"]) shells = subparser.add_mutually_exclusive_group() shells.add_argument( "--sh", action="store_const", dest="shell", const="sh", help="print sh commands to activate the environment", ) shells.add_argument( "--csh", action="store_const", dest="shell", const="csh", help="print csh commands to activate the environment", ) shells.add_argument( "--fish", action="store_const", dest="shell", const="fish", help="print fish commands to load the package", ) shells.add_argument( "--bat", action="store_const", dest="shell", const="bat", help="print bat commands to load the package", ) shells.add_argument( "--pwsh", action="store_const", dest="shell", const="pwsh", help="print pwsh commands to load the package", ) subparser.add_argument( "-a", "--all", action="store_true", help="unload all loaded Spack packages" )
[docs] def unload(parser, args): """unload spack packages from the user environment""" if args.specs and args.all: raise spack.error.SpackError( "Cannot specify specs on command line when unloading all specs with '--all'" ) hashes = os.environ.get(uenv.spack_loaded_hashes_var, "").split(":") if args.specs: specs = [ spack.cmd.disambiguate_spec_from_hashes(spec, hashes) for spec in spack.cmd.parse_specs(args.specs) ] else: specs = spack.store.STORE.db.query(hashes=hashes) if not args.shell: specs_str = " ".join(args.specs) or "SPECS" spack.cmd.common.shell_init_instructions( "spack unload", " eval `spack unload {sh_arg}` %s" % specs_str ) return 1 env_mod = uenv.environment_modifications_for_specs(*specs).reversed() for spec in specs: env_mod.remove_path(uenv.spack_loaded_hashes_var, spec.dag_hash()) cmds = env_mod.shell_modifications(args.shell) sys.stdout.write(cmds)