Github repository for the CSCS internship project with the goal of developing a Python tool for automatically generating Spack package recipes based on existing Python packages, with the ability to handle direct and transitive dependencies and flexible versions.
For more information, see the Documentation.
The package is still in development and not yet published to PyPI. It can however be installed manually.
-
If you don't have it yet, install Spack on your system.
-
py2spack imports various modules from Spack and thus needs to find those through
$PYTHONPATH- Make sure that the environment variable
SPACK_ROOTis set, e.g.export SPACK_ROOT=/home/<user>/spack. - Either execute the following in your active shell or place it in your shell rc file (e.g.
.bashrc,.zshrc). If you place it in the.rcfile, make sure$SPACK_ROOTis set or replace it with the explicit path.
export PYTHONPATH=$SPACK_ROOT/lib/spack/external/_vendoring:$SPACK_ROOT/lib/spack/external:$SPACK_ROOT/lib/spack:$PYTHONPATH
- Make sure that the environment variable
-
Install py2spack
- Directly from GitHub:
pip install git+https://github.com/davhofer/py2spack
- Or clone and install manually:
git clone [email protected]:davhofer/py2spack.git cd py2spack pip install .
usage: py2spack [-h] [--max-conversions MAX_CONVERSIONS] [--versions-per-package VERSIONS_PER_PACKAGE] [--repo REPO] [--allow-duplicate] package [--ignore [IGNORE ...]]
CLI for converting a python package and its dependencies to Spack.
positional arguments:
package Name of the package to be converted
options:
-h, --help show this help message and exit
--max-conversions MAX_CONVERSIONS
Maximum number of packages that are converted
--versions-per-package VERSIONS_PER_PACKAGE
Versions per package to be downloaded and converted
--repo REPO Name of or full path to local Spack repository where packages should be saved
--ignore [IGNORE ...]
List of packages to ignore. Must be specified last (after <package> argument) for the command to work
--allow-duplicate Convert the package, even if a package of the same name already exists in some Spack repo. Will NOT overwrite the existing package. Only applies to the main package to be converted, not to dependencies.
py2spack package-namepy2spack https://github.com/user/package-nameor
py2spack user/package-nameNOTE: dependencies will always be resolved through PyPI, even when converting a package from GitHub
To check out the detailed documentation (API docs, usage, implementation, package conversion, etc.), you need to clone the repository and build the docs:
pip install .[docs]
cd docs; make htmlYou can then browse it locally, e.g.
firefox _build/html/index.htmlAfter installing the package with the tests option, the tests can be run from the project root directory as follows:
python -m pytestInstallation tests for converted packages are run through GitHub Actions in a Docker container, see .github/workflows/run-installation-tests.yaml.
Created by David Hofer (davhofer, davhofer [at] ethz [dot] ch) during an internship at CSCS.