environments.rst: go from simple to advanced (#45004)
* environments.rst: go from simple to advanced * improvements * notes about activation
This commit is contained in:
		| @@ -931,32 +931,84 @@ This allows for a much-needed reduction in redundancy between packages | |||||||
| and constraints. | and constraints. | ||||||
|  |  | ||||||
|  |  | ||||||
| ---------------- | ----------------- | ||||||
| Filesystem Views | Environment Views | ||||||
| ---------------- | ----------------- | ||||||
|  |  | ||||||
| Spack Environments can define filesystem views, which provide a direct access point | Spack Environments can have an associated filesystem view, which is a directory | ||||||
| for software similar to the directory hierarchy that might exist under ``/usr/local``. | with a more traditional structure ``<view>/bin``, ``<view>/lib``, ``<view>/include`` | ||||||
| Filesystem views are updated every time the environment is written out to the lock | in which all files of the installed packages are linked. | ||||||
| file ``spack.lock``, so the concrete environment and the view are always compatible. |  | ||||||
| The files of the view's installed packages are brought into the view by symbolic or | By default a view is created for each environment, thanks to the ``view: true`` | ||||||
| hard links, referencing the original Spack installation, or by copy. | option in the ``spack.yaml`` manifest file: | ||||||
|  |  | ||||||
|  | .. code-block:: yaml | ||||||
|  |  | ||||||
|  |    spack: | ||||||
|  |      specs: [perl, python] | ||||||
|  |      view: true | ||||||
|  |  | ||||||
|  | The view is created in a hidden directory ``.spack-env/view`` relative to the environment. | ||||||
|  | If you've used ``spack env activate``, you may have already interacted with this view. Spack | ||||||
|  | prepends its ``<view>/bin`` dir to ``PATH`` when the environment is activated, so that | ||||||
|  | you can directly run executables from all installed packages in the environment. | ||||||
|  |  | ||||||
|  | Views are highly customizable: you can control where they are put, modify their structure, | ||||||
|  | include and exclude specs, change how files are linked, and you can even generate multiple | ||||||
|  | views for a single environment. | ||||||
|  |  | ||||||
| .. _configuring_environment_views: | .. _configuring_environment_views: | ||||||
|  |  | ||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||||
| Configuration in ``spack.yaml`` | Minimal view configuration | ||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||||
|  |  | ||||||
| The Spack Environment manifest file has a top-level keyword | The minimal configuration | ||||||
| ``view``. Each entry under that heading is a **view descriptor**, headed |  | ||||||
| by a name. Any number of views may be defined under the ``view`` heading. | .. code-block:: yaml | ||||||
| The view descriptor contains the root of the view, and |  | ||||||
| optionally the projections for the view, ``select`` and |    spack: | ||||||
| ``exclude`` lists for the view and link information via ``link`` and |      # ... | ||||||
|  |      view: true | ||||||
|  |  | ||||||
|  | lets Spack generate a single view with default settings under the | ||||||
|  | ``.spack-env/view`` directory of the environment. | ||||||
|  |  | ||||||
|  | Another short way to configure a view is to specify just where to put it: | ||||||
|  |  | ||||||
|  | .. code-block:: yaml | ||||||
|  |  | ||||||
|  |    spack: | ||||||
|  |      # ... | ||||||
|  |      view: /path/to/view | ||||||
|  |  | ||||||
|  | Views can also be disabled by setting ``view: false``. | ||||||
|  |  | ||||||
|  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||||
|  | Advanced view configuration | ||||||
|  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||||
|  |  | ||||||
|  | One or more **view descriptors** can be defined under ``view``, keyed by a name. | ||||||
|  | The example from the previous section with ``view: /path/to/view`` is equivalent | ||||||
|  | to defining a view descriptor named ``default`` with a ``root`` attribute: | ||||||
|  |  | ||||||
|  | .. code-block:: yaml | ||||||
|  |  | ||||||
|  |    spack: | ||||||
|  |      # ... | ||||||
|  |      view: | ||||||
|  |        default:  # name of the view | ||||||
|  |          root: /path/to/view  # view descriptor attribute | ||||||
|  |  | ||||||
|  | The ``default`` view descriptor name is special: when you ``spack env activate`` your | ||||||
|  | environment, this view will be used to update (among other things) your ``PATH`` | ||||||
|  | variable. | ||||||
|  |  | ||||||
|  | View descriptors must contain the root of the view, and optionally projections, | ||||||
|  | ``select`` and ``exclude`` lists and link information via ``link`` and | ||||||
| ``link_type``. | ``link_type``. | ||||||
|  |  | ||||||
| For example, in the following manifest | As a more advanced example, in the following manifest | ||||||
| file snippet we define a view named ``mpis``, rooted at | file snippet we define a view named ``mpis``, rooted at | ||||||
| ``/path/to/view`` in which all projections use the package name, | ``/path/to/view`` in which all projections use the package name, | ||||||
| version, and compiler name to determine the path for a given | version, and compiler name to determine the path for a given | ||||||
| @@ -1001,59 +1053,10 @@ of ``hardlink`` or ``copy``. | |||||||
|    when the environment is not activated, and linked libraries will be located |    when the environment is not activated, and linked libraries will be located | ||||||
|    *outside* of the view thanks to rpaths. |    *outside* of the view thanks to rpaths. | ||||||
|  |  | ||||||
|  |  | ||||||
| There are two shorthands for environments with a single view. If the |  | ||||||
| environment at ``/path/to/env`` has a single view, with a root at |  | ||||||
| ``/path/to/env/.spack-env/view``, with default selection and exclusion |  | ||||||
| and the default projection, we can put ``view: True`` in the |  | ||||||
| environment manifest. Similarly, if the environment has a view with a |  | ||||||
| different root, but default selection, exclusion, and projections, the |  | ||||||
| manifest can say ``view: /path/to/view``. These views are |  | ||||||
| automatically named ``default``, so that |  | ||||||
|  |  | ||||||
| .. code-block:: yaml |  | ||||||
|  |  | ||||||
|    spack: |  | ||||||
|      # ... |  | ||||||
|      view: True |  | ||||||
|  |  | ||||||
| is equivalent to |  | ||||||
|  |  | ||||||
| .. code-block:: yaml |  | ||||||
|  |  | ||||||
|    spack: |  | ||||||
|      # ... |  | ||||||
|      view: |  | ||||||
|        default: |  | ||||||
|          root: .spack-env/view |  | ||||||
|  |  | ||||||
| and |  | ||||||
|  |  | ||||||
| .. code-block:: yaml |  | ||||||
|  |  | ||||||
|    spack: |  | ||||||
|      # ... |  | ||||||
|      view: /path/to/view |  | ||||||
|  |  | ||||||
| is equivalent to |  | ||||||
|  |  | ||||||
| .. code-block:: yaml |  | ||||||
|  |  | ||||||
|    spack: |  | ||||||
|      # ... |  | ||||||
|      view: |  | ||||||
|        default: |  | ||||||
|          root: /path/to/view |  | ||||||
|  |  | ||||||
| By default, Spack environments are configured with ``view: True`` in |  | ||||||
| the manifest. Environments can be configured without views using |  | ||||||
| ``view: False``. For backwards compatibility reasons, environments |  | ||||||
| with no ``view`` key are treated the same as ``view: True``. |  | ||||||
|  |  | ||||||
| From the command line, the ``spack env create`` command takes an | From the command line, the ``spack env create`` command takes an | ||||||
| argument ``--with-view [PATH]`` that sets the path for a single, default | argument ``--with-view [PATH]`` that sets the path for a single, default | ||||||
| view. If no path is specified, the default path is used (``view: | view. If no path is specified, the default path is used (``view: | ||||||
| True``). The argument ``--without-view`` can be used to create an | true``). The argument ``--without-view`` can be used to create an | ||||||
| environment without any view configured. | environment without any view configured. | ||||||
|  |  | ||||||
| The ``spack env view`` command can be used to change the manage views | The ``spack env view`` command can be used to change the manage views | ||||||
| @@ -1119,11 +1122,18 @@ the projection under ``all`` before reaching those entries. | |||||||
| Activating environment views | Activating environment views | ||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||||
|  |  | ||||||
| The ``spack env activate`` command will put the default view for the | The ``spack env activate <env>`` has two effects: | ||||||
| environment into the user's path, in addition to activating the |  | ||||||
| environment for Spack commands. The arguments ``-v,--with-view`` and | 1. It activates the environment so that further Spack commands such | ||||||
| ``-V,--without-view`` can be used to tune this behavior. The default |    as ``spack install`` will run in the context of the environment. | ||||||
| behavior is to activate with the environment view if there is one. | 2. It activates the view so that environment variables such as | ||||||
|  |    ``PATH`` are updated to include the view. | ||||||
|  |  | ||||||
|  | Without further arguments, the ``default`` view of the environment is | ||||||
|  | activated. If a view with a different name has to be activated, | ||||||
|  | ``spack env activate --with-view <name> <env>`` can be | ||||||
|  | used instead. You can also activate the environment without modifying | ||||||
|  | further environment variables using ``--without-view``. | ||||||
|  |  | ||||||
| The environment variables affected by the ``spack env activate`` | The environment variables affected by the ``spack env activate`` | ||||||
| command and the paths that are used to update them are determined by | command and the paths that are used to update them are determined by | ||||||
| @@ -1146,8 +1156,8 @@ relevant variable if the path exists. For this reason, it is not | |||||||
| recommended to use non-default projections with the default view of an | recommended to use non-default projections with the default view of an | ||||||
| environment. | environment. | ||||||
|  |  | ||||||
| The ``spack env deactivate`` command will remove the default view of | The ``spack env deactivate`` command will remove the active view of | ||||||
| the environment from the user's path. | the Spack environment from the user's environment variables. | ||||||
|  |  | ||||||
|  |  | ||||||
| .. _env-generate-depfile: | .. _env-generate-depfile: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Harmen Stoppels
					Harmen Stoppels