Clone of the official spack repository with modifications for HLRS HAWK
Find a file
Todd Gamblin 97980a8f94 prefer Python 3 to Python 2 for running Spack
The Python landscape is going to be changing in 2020, and Python 2 will
be end of life. Spack should *prefer* Python 3 to Python 2 by default,
but we still need to run on systems that only have Python2 available.

This is trickier than it sounds, as on some systems, the `python` command
is `python2`; on others it's `python3`, and RHEL8 doesn't even have the
`python` command.  Instead, it makes you choose `python3` or
`python2`. You can thus no longer make a simple shebang to handle all the
cases.

This commit makes the `spack` script bilingual.  It is still valid
Python, but its shebang is `#!/bin/sh`, and it has a tiny bit of shell
code at the beginning to pick the right python and execute itself with
what it finds.

This has a lot of advantages.  I think this will help ensure that Spack
works well in Python3 -- there are cases where we've missed things
because Python2 is still the default `python` on most systems.  Also,
with this change, you do not lose the ability to execute the `spack`
script directly with a python interpreter.  This is useful for forcing
your own version of python, running coverage tools, and running profiling
tools.  i.e., these will not break with this change:

```console
$ python2 $(which spack) <args>
$ coverage run $(which spack) <args>
$ pyinstrument $(which spack) <args>
```

These would not work if we split `spack` into a python file and a shell
script (see #11783).  So, this gives us the best of both worlds.  We get
to control our interpreter *and* remain a mostly pure python executable.
2019-09-29 09:32:04 -07:00
.github Revert "add maintainer review action to main.workflow" (#12316) 2019-08-07 17:23:47 -07:00
bin prefer Python 3 to Python 2 for running Spack 2019-09-29 09:32:04 -07:00
etc/spack/defaults Remove CombinatorialSpecSet in favor of environments + stacks 2019-09-13 22:57:15 -07:00
lib/spack Add all the 'generic' architectures that are mentioned in recipes (#12958) 2019-09-28 21:47:05 -07:00
share/spack Add --known-targets to bash completion for arch command (#12887) 2019-09-20 20:09:44 +02:00
var/spack The perl-uri-escape package duplicates perl-uri (#12971) 2019-09-29 09:27:42 -05:00
.codecov.yml coverage: restore status updates on PRs (#12032) 2019-07-15 22:45:00 -07:00
.coveragerc coverage: use kcov to get coverage for our cc script 2018-12-29 23:47:29 -08:00
.dockerignore fix multiple issues with the docker images (#9718) 2018-12-20 11:11:55 -08:00
.flake8 flake8: add exceptions for overly pedantic camelcase rules from pep8-naming (#11477) 2019-05-16 09:47:02 +02:00
.flake8_packages flake8: add exceptions for overly pedantic camelcase rules from pep8-naming (#11477) 2019-05-16 09:47:02 +02:00
.gitignore Ignore git *.orig files and emacs backup files 2019-09-18 23:51:27 -07:00
.gitlab-ci.yml Fixes identified in ecp facilities hackathon fixes: 2019-09-13 22:57:15 -07:00
.mailmap Update for 'eccodes'. (#6604) 2017-12-08 09:34:37 +01:00
.readthedocs.yml Updated Sphinx configuration (#11165) 2019-04-11 14:38:52 -07:00
.travis.yml Avoid sending empty reports to codecov (#12293) 2019-08-06 10:35:23 -07:00
COPYRIGHT External: add macholib and altgraph needed to relocate Mach-o binaries on Linux (#12909) 2019-09-26 11:48:22 -05:00
LICENSE-APACHE relicense: update COPYRIGHT, LICENSE-*, README, CONTRIBUTING, and NOTICE 2018-10-17 14:42:06 -07:00
LICENSE-MIT copyright: update license headers for 2013-2019 copyright. 2019-01-01 00:44:28 -08:00
NOTICE relicense: update COPYRIGHT, LICENSE-*, README, CONTRIBUTING, and NOTICE 2018-10-17 14:42:06 -07:00
README.md readme: make list of links even tighter. 2019-06-30 23:15:37 -07:00

Spack Spack

Build Status codecov Read the Docs Slack

Spack is a multi-platform package manager that builds and installs multiple versions and configurations of software. It works on Linux, macOS, and many supercomputers. Spack is non-destructive: installing a new version of a package does not break existing installations, so many configurations of the same package can coexist.

Spack offers a simple "spec" syntax that allows users to specify versions and configuration options. Package files are written in pure Python, and specs allow package authors to write a single script for many different builds of the same package. With Spack, you can build your software all the ways you want to.

See the Feature Overview for examples and highlights.

To install spack and your first package, make sure you have Python. Then:

$ git clone https://github.com/spack/spack.git
$ cd spack/bin
$ ./spack install zlib

Documentation

Full documentation is available, or run spack help or spack help --all.

Tutorial

We maintain a hands-on tutorial. It covers basic to advanced usage, packaging, developer features, and large HPC deployments. You can do all of the exercises on your own laptop using a Docker container.

Feel free to use these materials to teach users at your organization about Spack.

Community

Spack is an open source project. Questions, discussion, and contributions are welcome. Contributions can be anything from new packages to bugfixes, documentation, or even new core features.

Resources:

Contributing

Contributing to Spack is relatively easy. Just send us a pull request. When you send your request, make develop the destination branch on the Spack repository.

Your PR must pass Spack's unit tests and documentation tests, and must be PEP 8 compliant. We enforce these guidelines with Travis CI. To run these tests locally, and for helpful tips on git, see our Contribution Guide.

Spack uses a rough approximation of the Git Flow branching model. The develop branch contains the latest contributions, and master is always tagged and points to the latest stable release.

Code of Conduct

Please note that Spack has a Code of Conduct. By participating in the Spack community, you agree to abide by its rules.

Authors

Many thanks go to Spack's contributors.

Spack was created by Todd Gamblin, tgamblin@llnl.gov.

Citing Spack

If you are referencing Spack in a publication, please cite the following paper:

License

Spack is distributed under the terms of both the MIT license and the Apache License (Version 2.0). Users may choose either license, at their option.

All new contributions must be made under both the MIT and Apache-2.0 licenses.

See LICENSE-MIT, LICENSE-APACHE, COPYRIGHT, and NOTICE for details.

SPDX-License-Identifier: (Apache-2.0 OR MIT)

LLNL-CODE-647188