Compare commits
5 Commits
psakiev/ct
...
v0.19.0
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bb8b4f9979 | ||
![]() |
fc7a16e77e | ||
![]() |
e633e57297 | ||
![]() |
7b74fab12f | ||
![]() |
005c7cd353 |
274
CHANGELOG.md
274
CHANGELOG.md
@@ -1,16 +1,284 @@
|
|||||||
|
# v0.19.0 (2022-11-11)
|
||||||
|
|
||||||
|
`v0.19.0` is a major feature release.
|
||||||
|
|
||||||
|
## Major features in this release
|
||||||
|
|
||||||
|
1. **Package requirements**
|
||||||
|
|
||||||
|
Spack's traditional [package preferences](
|
||||||
|
https://spack.readthedocs.io/en/latest/build_settings.html#package-preferences)
|
||||||
|
are soft, but we've added hard requriements to `packages.yaml` and `spack.yaml`
|
||||||
|
(#32528, #32369). Package requirements use the same syntax as specs:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
packages:
|
||||||
|
libfabric:
|
||||||
|
require: "@1.13.2"
|
||||||
|
mpich:
|
||||||
|
require:
|
||||||
|
- one_of: ["+cuda", "+rocm"]
|
||||||
|
```
|
||||||
|
|
||||||
|
More details in [the docs](
|
||||||
|
https://spack.readthedocs.io/en/latest/build_settings.html#package-requirements).
|
||||||
|
|
||||||
|
2. **Environment UI Improvements**
|
||||||
|
|
||||||
|
* Fewer surprising modifications to `spack.yaml` (#33711):
|
||||||
|
|
||||||
|
* `spack install` in an environment will no longer add to the `specs:` list; you'll
|
||||||
|
need to either use `spack add <spec>` or `spack install --add <spec>`.
|
||||||
|
|
||||||
|
* Similarly, `spack uninstall` will not remove from your environment's `specs:`
|
||||||
|
list; you'll need to use `spack remove` or `spack uninstall --remove`.
|
||||||
|
|
||||||
|
This will make it easier to manage an environment, as there is clear separation
|
||||||
|
between the stack to be installed (`spack.yaml`/`spack.lock`) and which parts of
|
||||||
|
it should be installed (`spack install` / `spack uninstall`).
|
||||||
|
|
||||||
|
* `concretizer:unify:true` is now the default mode for new environments (#31787)
|
||||||
|
|
||||||
|
We see more users creating `unify:true` environments now. Users who need
|
||||||
|
`unify:false` can add it to their environment to get the old behavior. This will
|
||||||
|
concretize every spec in the environment independently.
|
||||||
|
|
||||||
|
* Include environment configuration from URLs (#29026, [docs](
|
||||||
|
https://spack.readthedocs.io/en/latest/environments.html#included-configurations))
|
||||||
|
|
||||||
|
You can now include configuration in your environment directly from a URL:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
spack:
|
||||||
|
include:
|
||||||
|
- https://github.com/path/to/raw/config/compilers.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Multiple Build Systems**
|
||||||
|
|
||||||
|
An increasing number of packages in the ecosystem need the ability to support
|
||||||
|
multiple build systems (#30738, [docs](
|
||||||
|
https://spack.readthedocs.io/en/latest/packaging_guide.html#multiple-build-systems)),
|
||||||
|
either across versions, across platforms, or within the same version of the software.
|
||||||
|
This has been hard to support through multiple inheritance, as methods from different
|
||||||
|
build system superclasses would conflict. `package.py` files can now define separate
|
||||||
|
builder classes with installation logic for different build systems, e.g.:
|
||||||
|
|
||||||
|
```python
|
||||||
|
class ArpackNg(CMakePackage, AutotoolsPackage):
|
||||||
|
|
||||||
|
build_system(
|
||||||
|
conditional("cmake", when="@0.64:"),
|
||||||
|
conditional("autotools", when="@:0.63"),
|
||||||
|
default="cmake",
|
||||||
|
)
|
||||||
|
|
||||||
|
class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder):
|
||||||
|
def cmake_args(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Autotoolsbuilder(spack.build_systems.autotools.AutotoolsBuilder):
|
||||||
|
def configure_args(self):
|
||||||
|
pass
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Compiler and variant propagation**
|
||||||
|
|
||||||
|
Currently, compiler flags and variants are inconsistent: compiler flags set for a
|
||||||
|
package are inherited by its dependencies, while variants are not. We should have
|
||||||
|
these be consistent by allowing for inheritance to be enabled or disabled for both
|
||||||
|
variants and compiler flags.
|
||||||
|
|
||||||
|
Example syntax:
|
||||||
|
- `package ++variant`:
|
||||||
|
enabled variant that will be propagated to dependencies
|
||||||
|
- `package +variant`:
|
||||||
|
enabled variant that will NOT be propagated to dependencies
|
||||||
|
- `package ~~variant`:
|
||||||
|
disabled variant that will be propagated to dependencies
|
||||||
|
- `package ~variant`:
|
||||||
|
disabled variant that will NOT be propagated to dependencies
|
||||||
|
- `package cflags==-g`:
|
||||||
|
`cflags` will be propagated to dependencies
|
||||||
|
- `package cflags=-g`:
|
||||||
|
`cflags` will NOT be propagated to dependencies
|
||||||
|
|
||||||
|
Syntax for non-boolan variants is similar to compiler flags. More in the docs for
|
||||||
|
[variants](
|
||||||
|
https://spack.readthedocs.io/en/latest/basic_usage.html#variants) and [compiler flags](
|
||||||
|
https://spack.readthedocs.io/en/latest/basic_usage.html#compiler-flags).
|
||||||
|
|
||||||
|
6. **Enhancements to git version specifiers**
|
||||||
|
|
||||||
|
* `v0.18.0` added the ability to use git commits as versions. You can now use the
|
||||||
|
`git.` prefix to specify git tags or branches as versions. All of these are valid git
|
||||||
|
versions in `v0.19` (#31200):
|
||||||
|
|
||||||
|
```console
|
||||||
|
foo@abcdef1234abcdef1234abcdef1234abcdef1234 # raw commit
|
||||||
|
foo@git.abcdef1234abcdef1234abcdef1234abcdef1234 # commit with git prefix
|
||||||
|
foo@git.develop # the develop branch
|
||||||
|
foo@git.0.19 # use the 0.19 tag
|
||||||
|
```
|
||||||
|
|
||||||
|
* `v0.19` also gives you more control over how Spack interprets git versions, in case
|
||||||
|
Spack cannot detect the version from the git repository. You can suffix a git
|
||||||
|
version with `=<version>` to force Spack to concretize it as a particular version
|
||||||
|
(#30998, #31914, #32257):
|
||||||
|
|
||||||
|
```console
|
||||||
|
# use mybranch, but treat it as version 3.2 for version comparison
|
||||||
|
foo@git.mybranch=3.2
|
||||||
|
|
||||||
|
# use the given commit, but treat it as develop for version comparison
|
||||||
|
foo@git.abcdef1234abcdef1234abcdef1234abcdef1234=develop
|
||||||
|
```
|
||||||
|
|
||||||
|
More in [the docs](
|
||||||
|
https://spack.readthedocs.io/en/latest/basic_usage.html#version-specifier)
|
||||||
|
|
||||||
|
7. **Changes to Cray EX Support**
|
||||||
|
|
||||||
|
Cray machines have historically had their own "platform" within Spack, because we
|
||||||
|
needed to go through the module system to leverage compilers and MPI installations on
|
||||||
|
these machines. The Cray EX programming environment now provides standalone `craycc`
|
||||||
|
executables and proper `mpicc` wrappers, so Spack can treat EX machines like Linux
|
||||||
|
with extra packages (#29392).
|
||||||
|
|
||||||
|
We expect this to greatly reduce bugs, as external packages and compilers can now be
|
||||||
|
used by prefix instead of through modules. We will also no longer be subject to
|
||||||
|
reproducibility issues when modules change from Cray PE release to release and from
|
||||||
|
site to site. This also simplifies dealing with the underlying Linux OS on cray
|
||||||
|
systems, as Spack will properly model the machine's OS as either SuSE or RHEL.
|
||||||
|
|
||||||
|
8. **Improvements to tests and testing in CI**
|
||||||
|
|
||||||
|
* `spack ci generate --tests` will generate a `.gitlab-ci.yml` file that not only does
|
||||||
|
builds but also runs tests for built packages (#27877). Public GitHub pipelines now
|
||||||
|
also run tests in CI.
|
||||||
|
|
||||||
|
* `spack test run --explicit` will only run tests for packages that are explicitly
|
||||||
|
installed, instead of all packages.
|
||||||
|
|
||||||
|
9. **Experimental binding link model**
|
||||||
|
|
||||||
|
You can add a new option to `config.yaml` to make Spack embed absolute paths to
|
||||||
|
needed shared libraries in ELF executables and shared libraries on Linux (#31948, [docs](
|
||||||
|
https://spack.readthedocs.io/en/latest/config_yaml.html#shared-linking-bind)):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
config:
|
||||||
|
shared_linking:
|
||||||
|
type: rpath
|
||||||
|
bind: true
|
||||||
|
```
|
||||||
|
|
||||||
|
This can improve launch time at scale for parallel applications, and it can make
|
||||||
|
installations less susceptible to environment variables like `LD_LIBRARY_PATH`, even
|
||||||
|
especially when dealing with external libraries that use `RUNPATH`. You can think of
|
||||||
|
this as a faster, even higher-precedence version of `RPATH`.
|
||||||
|
|
||||||
|
## Other new features of note
|
||||||
|
|
||||||
|
* `spack spec` prints dependencies more legibly. Dependencies in the output now appear
|
||||||
|
at the *earliest* level of indentation possible (#33406)
|
||||||
|
* You can override `package.py` attributes like `url`, directly in `packages.yaml`
|
||||||
|
(#33275, [docs](
|
||||||
|
https://spack.readthedocs.io/en/latest/build_settings.html#assigning-package-attributes))
|
||||||
|
* There are a number of new architecture-related format strings you can use in Spack
|
||||||
|
configuration files to specify paths (#29810, [docs](
|
||||||
|
https://spack.readthedocs.io/en/latest/configuration.html#config-file-variables))
|
||||||
|
* Spack now supports bootstrapping Clingo on Windows (#33400)
|
||||||
|
* There is now support for an `RPATH`-like library model on Windows (#31930)
|
||||||
|
|
||||||
|
## Performance Improvements
|
||||||
|
|
||||||
|
* Major performance improvements for installation from binary caches (#27610, #33628,
|
||||||
|
#33636, #33608, #33590, #33496)
|
||||||
|
* Test suite can now be parallelized using `xdist` (used in GitHub Actions) (#32361)
|
||||||
|
* Reduce lock contention for parallel builds in environments (#31643)
|
||||||
|
|
||||||
|
## New binary caches and stacks
|
||||||
|
|
||||||
|
* We now build nearly all of E4S with `oneapi` in our buildcache (#31781, #31804,
|
||||||
|
#31804, #31803, #31840, #31991, #32117, #32107, #32239)
|
||||||
|
* Added 3 new machine learning-centric stacks to binary cache: `x86_64_v3`, CUDA, ROCm
|
||||||
|
(#31592, #33463)
|
||||||
|
|
||||||
|
## Removals and Deprecations
|
||||||
|
|
||||||
|
* Support for Python 3.5 is dropped (#31908). Only Python 2.7 and 3.6+ are officially
|
||||||
|
supported.
|
||||||
|
|
||||||
|
* This is the last Spack release that will support Python 2 (#32615). Spack `v0.19`
|
||||||
|
will emit a deprecation warning if you run it with Python 2, and Python 2 support will
|
||||||
|
soon be removed from the `develop` branch.
|
||||||
|
|
||||||
|
* `LD_LIBRARY_PATH` is no longer set by default by `spack load` or module loads.
|
||||||
|
|
||||||
|
Setting `LD_LIBRARY_PATH` in Spack environments/modules can cause binaries from
|
||||||
|
outside of Spack to crash, and Spack's own builds use `RPATH` and do not need
|
||||||
|
`LD_LIBRARY_PATH` set in order to run. If you still want the old behavior, you
|
||||||
|
can run these commands to configure Spack to set `LD_LIBRARY_PATH`:
|
||||||
|
|
||||||
|
```console
|
||||||
|
spack config add modules:prefix_inspections:lib64:[LD_LIBRARY_PATH]
|
||||||
|
spack config add modules:prefix_inspections:lib:[LD_LIBRARY_PATH]
|
||||||
|
```
|
||||||
|
|
||||||
|
* The `spack:concretization:[together|separately]` has been removed after being
|
||||||
|
deprecated in `v0.18`. Use `concretizer:unify:[true|false]`.
|
||||||
|
* `config:module_roots` is no longer supported after being deprecated in `v0.18`. Use
|
||||||
|
configuration in module sets instead (#28659, [docs](
|
||||||
|
https://spack.readthedocs.io/en/latest/module_file_support.html)).
|
||||||
|
* `spack activate` and `spack deactivate` are no longer supported, having been
|
||||||
|
deprecated in `v0.18`. Use an environment with a view instead of
|
||||||
|
activating/deactivating ([docs](
|
||||||
|
https://spack.readthedocs.io/en/latest/environments.html#configuration-in-spack-yaml)).
|
||||||
|
* The old YAML format for buildcaches is now deprecated (#33707). If you are using an
|
||||||
|
old buildcache with YAML metadata you will need to regenerate it with JSON metadata.
|
||||||
|
* `spack bootstrap trust` and `spack bootstrap untrust` are deprecated in favor of
|
||||||
|
`spack bootstrap enable` and `spack bootstrap disable` and will be removed in `v0.20`.
|
||||||
|
(#33600)
|
||||||
|
* The `graviton2` architecture has been renamed to `neoverse_n1`, and `graviton3`
|
||||||
|
is now `neoverse_v1`. Buildcaches using the old architecture names will need to be rebuilt.
|
||||||
|
* The terms `blacklist` and `whitelist` have been replaced with `include` and `exclude`
|
||||||
|
in all configuration files (#31569). You can use `spack config update` to
|
||||||
|
automatically fix your configuration files.
|
||||||
|
|
||||||
|
## Notable Bugfixes
|
||||||
|
|
||||||
|
* Permission setting on installation now handles effective uid properly (#19980)
|
||||||
|
* `buildable:true` for an MPI implementation now overrides `buildable:false` for `mpi` (#18269)
|
||||||
|
* Improved error messages when attempting to use an unconfigured compiler (#32084)
|
||||||
|
* Do not punish explicitly requested compiler mismatches in the solver (#30074)
|
||||||
|
* `spack stage`: add missing --fresh and --reuse (#31626)
|
||||||
|
* Fixes for adding build system executables like `cmake` to package scope (#31739)
|
||||||
|
* Bugfix for binary relocation with aliased strings produced by newer `binutils` (#32253)
|
||||||
|
|
||||||
|
## Spack community stats
|
||||||
|
|
||||||
|
* 6,751 total packages, 335 new since `v0.18.0`
|
||||||
|
* 141 new Python packages
|
||||||
|
* 89 new R packages
|
||||||
|
* 303 people contributed to this release
|
||||||
|
* 287 committers to packages
|
||||||
|
* 57 committers to core
|
||||||
|
|
||||||
|
|
||||||
# v0.18.1 (2022-07-19)
|
# v0.18.1 (2022-07-19)
|
||||||
|
|
||||||
### Spack Bugfixes
|
### Spack Bugfixes
|
||||||
* Fix several bugs related to bootstrapping (#30834,#31042,#31180)
|
* Fix several bugs related to bootstrapping (#30834,#31042,#31180)
|
||||||
* Fix a regression that was causing spec hashes to differ between
|
* Fix a regression that was causing spec hashes to differ between
|
||||||
Python 2 and Python 3 (#31092)
|
Python 2 and Python 3 (#31092)
|
||||||
* Fixed compiler flags for oneAPI and DPC++ (#30856)
|
* Fixed compiler flags for oneAPI and DPC++ (#30856)
|
||||||
* Fixed several issues related to concretization (#31142,#31153,#31170,#31226)
|
* Fixed several issues related to concretization (#31142,#31153,#31170,#31226)
|
||||||
* Improved support for Cray manifest file and `spack external find` (#31144,#31201,#31173,#31186)
|
* Improved support for Cray manifest file and `spack external find` (#31144,#31201,#31173,#31186)
|
||||||
* Assign a version to openSUSE Tumbleweed according to the GLIBC version
|
* Assign a version to openSUSE Tumbleweed according to the GLIBC version
|
||||||
in the system (#19895)
|
in the system (#19895)
|
||||||
* Improved Dockerfile generation for `spack containerize` (#29741,#31321)
|
* Improved Dockerfile generation for `spack containerize` (#29741,#31321)
|
||||||
* Fixed a few bugs related to concurrent execution of commands (#31509,#31493,#31477)
|
* Fixed a few bugs related to concurrent execution of commands (#31509,#31493,#31477)
|
||||||
|
|
||||||
### Package updates
|
### Package updates
|
||||||
* WarpX: add v22.06, fixed libs property (#30866,#31102)
|
* WarpX: add v22.06, fixed libs property (#30866,#31102)
|
||||||
|
@@ -10,8 +10,8 @@ For more on Spack's release structure, see
|
|||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | ------------------ |
|
| ------- | ------------------ |
|
||||||
| develop | :white_check_mark: |
|
| develop | :white_check_mark: |
|
||||||
| 0.17.x | :white_check_mark: |
|
| 0.19.x | :white_check_mark: |
|
||||||
| 0.16.x | :white_check_mark: |
|
| 0.18.x | :white_check_mark: |
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
@@ -1672,9 +1672,13 @@ own install prefix. However, certain packages are typically installed
|
|||||||
`Python <https://www.python.org>`_ packages are typically installed in the
|
`Python <https://www.python.org>`_ packages are typically installed in the
|
||||||
``$prefix/lib/python-2.7/site-packages`` directory.
|
``$prefix/lib/python-2.7/site-packages`` directory.
|
||||||
|
|
||||||
Spack has support for this type of installation as well. In Spack,
|
In Spack, installation prefixes are immutable, so this type of installation
|
||||||
a package that can live inside the prefix of another package is called
|
is not directly supported. However, it is possible to create views that
|
||||||
an *extension*. Suppose you have Python installed like so:
|
allow you to merge install prefixes of multiple packages into a single new prefix.
|
||||||
|
Views are a convenient way to get a more traditional filesystem structure.
|
||||||
|
Using *extensions*, you can ensure that Python packages always share the
|
||||||
|
same prefix in the view as Python itself. Suppose you have
|
||||||
|
Python installed like so:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@@ -1712,8 +1716,6 @@ You can find extensions for your Python installation like this:
|
|||||||
py-ipython@2.3.1 py-pygments@2.0.1 py-setuptools@11.3.1
|
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
|
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
|
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
|
they are packages like any other. They are installed into their own
|
||||||
prefixes, and you can see this with ``spack find --paths``:
|
prefixes, and you can see this with ``spack find --paths``:
|
||||||
@@ -1741,32 +1743,72 @@ directly when you run ``python``:
|
|||||||
ImportError: No module named numpy
|
ImportError: No module named numpy
|
||||||
>>>
|
>>>
|
||||||
|
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Using Extensions
|
Using Extensions in Environments
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
There are multiple ways to get ``numpy`` working in Python. The first is
|
The recommended way of working with extensions such as ``py-numpy``
|
||||||
to use :ref:`shell-support`. You can simply ``load`` the extension,
|
above is through :ref:`Environments <environments>`. For example,
|
||||||
and it will be added to the ``PYTHONPATH`` in your current shell, and
|
the following creates an environment in the current working directory
|
||||||
Python itself will be available in the ``PATH``:
|
with a filesystem view in the ``./view`` directory:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ spack env create --with-view view --dir .
|
||||||
|
$ spack -e . add py-numpy
|
||||||
|
$ spack -e . concretize
|
||||||
|
$ spack -e . install
|
||||||
|
|
||||||
|
We recommend environments for two reasons. Firstly, environments
|
||||||
|
can be activated (requires :ref:`shell-support`):
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ spack env activate .
|
||||||
|
|
||||||
|
which sets all the right environment variables such as ``PATH`` and
|
||||||
|
``PYTHONPATH``. This ensures that
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ python
|
||||||
|
>>> import numpy
|
||||||
|
|
||||||
|
works. Secondly, even without shell support, the view ensures
|
||||||
|
that Python can locate its extensions:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ ./view/bin/python
|
||||||
|
>>> import numpy
|
||||||
|
|
||||||
|
See :ref:`environments` for a more in-depth description of Spack
|
||||||
|
environments and customizations to views.
|
||||||
|
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
Using ``spack load``
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
A more traditional way of using Spack and extensions is ``spack load``
|
||||||
|
(requires :ref:`shell-support`). This will add the extension to ``PYTHONPATH``
|
||||||
|
in your current shell, and Python itself will be available in the ``PATH``:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ spack load py-numpy
|
$ spack load py-numpy
|
||||||
|
$ python
|
||||||
|
>>> import numpy
|
||||||
|
|
||||||
Now ``import numpy`` will succeed for as long as you keep your current
|
|
||||||
session open.
|
|
||||||
The loaded packages can be checked using ``spack find --loaded``
|
The loaded packages can be checked using ``spack find --loaded``
|
||||||
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Loading Extensions via Modules
|
Loading Extensions via Modules
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Instead of using Spack's environment modification capabilities through
|
Apart from ``spack env activate`` and ``spack load``, you can load numpy
|
||||||
the ``spack load`` command, you can load numpy through your
|
through your environment modules (using ``environment-modules`` or
|
||||||
environment modules (using ``environment-modules`` or ``lmod``). This
|
``lmod``). This will also add the extension to the ``PYTHONPATH`` in
|
||||||
will also add the extension to the ``PYTHONPATH`` in your current
|
your current shell.
|
||||||
shell.
|
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@@ -1776,15 +1818,6 @@ If you do not know the name of the specific numpy module you wish to
|
|||||||
load, you can use the ``spack module tcl|lmod loads`` command to get
|
load, you can use the ``spack module tcl|lmod loads`` command to get
|
||||||
the name of the module from the Spack spec.
|
the name of the module from the Spack spec.
|
||||||
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
Extensions in an Environment
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Another way to use extensions is to create a view, which merges the
|
|
||||||
python installation along with the extensions into a single prefix.
|
|
||||||
See :ref:`environments` for a more in-depth description
|
|
||||||
of environment views.
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
Filesystem requirements
|
Filesystem requirements
|
||||||
-----------------------
|
-----------------------
|
||||||
|
@@ -724,10 +724,9 @@ extends vs. depends_on
|
|||||||
|
|
||||||
This is very similar to the naming dilemma above, with a slight twist.
|
This is very similar to the naming dilemma above, with a slight twist.
|
||||||
As mentioned in the :ref:`Packaging Guide <packaging_extensions>`,
|
As mentioned in the :ref:`Packaging Guide <packaging_extensions>`,
|
||||||
``extends`` and ``depends_on`` are very similar, but ``extends`` adds
|
``extends`` and ``depends_on`` are very similar, but ``extends`` ensures
|
||||||
the ability to *activate* the package. Activation involves symlinking
|
that the extension and extendee share the same prefix in views.
|
||||||
everything in the installation prefix of the package to the installation
|
This allows the user to import a Python module without
|
||||||
prefix of Python. This allows the user to import a Python module without
|
|
||||||
having to add that module to ``PYTHONPATH``.
|
having to add that module to ``PYTHONPATH``.
|
||||||
|
|
||||||
When deciding between ``extends`` and ``depends_on``, the best rule of
|
When deciding between ``extends`` and ``depends_on``, the best rule of
|
||||||
@@ -735,7 +734,7 @@ thumb is to check the installation prefix. If Python libraries are
|
|||||||
installed to ``<prefix>/lib/pythonX.Y/site-packages``, then you
|
installed to ``<prefix>/lib/pythonX.Y/site-packages``, then you
|
||||||
should use ``extends``. If Python libraries are installed elsewhere
|
should use ``extends``. If Python libraries are installed elsewhere
|
||||||
or the only files that get installed reside in ``<prefix>/bin``, then
|
or the only files that get installed reside in ``<prefix>/bin``, then
|
||||||
don't use ``extends``, as symlinking the package wouldn't be useful.
|
don't use ``extends``.
|
||||||
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
Alternatives to Spack
|
Alternatives to Spack
|
||||||
|
@@ -193,10 +193,10 @@ Build system dependencies
|
|||||||
|
|
||||||
As an extension of the R ecosystem, your package will obviously depend
|
As an extension of the R ecosystem, your package will obviously depend
|
||||||
on R to build and run. Normally, we would use ``depends_on`` to express
|
on R to build and run. Normally, we would use ``depends_on`` to express
|
||||||
this, but for R packages, we use ``extends``. ``extends`` is similar to
|
this, but for R packages, we use ``extends``. This implies a special
|
||||||
``depends_on``, but adds an additional feature: the ability to "activate"
|
dependency on R, which is used to set environment variables such as
|
||||||
the package by symlinking it to the R installation directory. Since
|
``R_LIBS`` uniformly. Since every R package needs this, the ``RPackage``
|
||||||
every R package needs this, the ``RPackage`` base class contains:
|
base class contains:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
|
@@ -2634,9 +2634,12 @@ extendable package:
|
|||||||
extends('python')
|
extends('python')
|
||||||
...
|
...
|
||||||
|
|
||||||
Now, the ``py-numpy`` package can be used as an argument to ``spack
|
This accomplishes a few things. Firstly, the Python package can set special
|
||||||
activate``. When it is activated, all the files in its prefix will be
|
variables such as ``PYTHONPATH`` for all extensions when the run or build
|
||||||
symbolically linked into the prefix of the python package.
|
environment is set up. Secondly, filesystem views can ensure that extensions
|
||||||
|
are put in the same prefix as their extendee. This ensures that Python in
|
||||||
|
a view can always locate its Python packages, even without environment
|
||||||
|
variables set.
|
||||||
|
|
||||||
A package can only extend one other package at a time. To support packages
|
A package can only extend one other package at a time. To support packages
|
||||||
that may extend one of a list of other packages, Spack supports multiple
|
that may extend one of a list of other packages, Spack supports multiple
|
||||||
@@ -2684,9 +2687,8 @@ variant(s) are selected. This may be accomplished with conditional
|
|||||||
...
|
...
|
||||||
|
|
||||||
Sometimes, certain files in one package will conflict with those in
|
Sometimes, certain files in one package will conflict with those in
|
||||||
another, which means they cannot both be activated (symlinked) at the
|
another, which means they cannot both be used in a view at the
|
||||||
same time. In this case, you can tell Spack to ignore those files
|
same time. In this case, you can tell Spack to ignore those files:
|
||||||
when it does the activation:
|
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
@@ -2698,7 +2700,7 @@ when it does the activation:
|
|||||||
...
|
...
|
||||||
|
|
||||||
The code above will prevent everything in the ``$prefix/bin/`` directory
|
The code above will prevent everything in the ``$prefix/bin/`` directory
|
||||||
from being linked in at activation time.
|
from being linked in a view.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
#: PEP440 canonical <major>.<minor>.<micro>.<devN> string
|
#: PEP440 canonical <major>.<minor>.<micro>.<devN> string
|
||||||
__version__ = "0.19.0.dev0"
|
__version__ = "0.19.0"
|
||||||
spack_version = __version__
|
spack_version = __version__
|
||||||
|
|
||||||
|
|
||||||
|
@@ -493,9 +493,14 @@ def get_projection_for_spec(self, spec):
|
|||||||
Relies on the ordering of projections to avoid ambiguity.
|
Relies on the ordering of projections to avoid ambiguity.
|
||||||
"""
|
"""
|
||||||
spec = spack.spec.Spec(spec)
|
spec = spack.spec.Spec(spec)
|
||||||
proj = spack.projections.get_projection(self.projections, spec)
|
locator_spec = spec
|
||||||
|
|
||||||
|
if spec.package.extendee_spec:
|
||||||
|
locator_spec = spec.package.extendee_spec
|
||||||
|
|
||||||
|
proj = spack.projections.get_projection(self.projections, locator_spec)
|
||||||
if proj:
|
if proj:
|
||||||
return os.path.join(self._root, spec.format(proj))
|
return os.path.join(self._root, locator_spec.format(proj))
|
||||||
return self._root
|
return self._root
|
||||||
|
|
||||||
def get_all_specs(self):
|
def get_all_specs(self):
|
||||||
@@ -743,6 +748,10 @@ def get_projection_for_spec(self, spec):
|
|||||||
Relies on the ordering of projections to avoid ambiguity.
|
Relies on the ordering of projections to avoid ambiguity.
|
||||||
"""
|
"""
|
||||||
spec = spack.spec.Spec(spec)
|
spec = spack.spec.Spec(spec)
|
||||||
|
|
||||||
|
if spec.package.extendee_spec:
|
||||||
|
spec = spec.package.extendee_spec
|
||||||
|
|
||||||
proj = spack.projections.get_projection(self.projections, spec)
|
proj = spack.projections.get_projection(self.projections, spec)
|
||||||
if proj:
|
if proj:
|
||||||
return os.path.join(self._root, spec.format(proj))
|
return os.path.join(self._root, spec.format(proj))
|
||||||
|
Reference in New Issue
Block a user