关于 Spack
Spack 是一款适用于超级计算机、Linux、macOS 和 Windows 的软件包管理器。它让科学软件的安装变得简单。使用 Spack,你可以构建具有多种版本、配置和编译器的软件包,且所有这些构建版本都可以在同一台机器上共存。
Spack 不绑定于任何特定语言;你可以构建由 Python 或 R 软件包组成的软件栈,链接到用 C、C++ 或 Fortran 编写的库,轻松切换编译器,并针对特定的微架构进行优化。使用 Spack,你无需 root 权限即可在主目录下安装软件,能够管理共享安装和模块,或者为测试目的构建组合版本的软件。
安装 Spack
从 GitHub 克隆 Spack,即可立即开始使用
git clone https://github.com/spack/spack.git
. spack/share/spack/setup-env.sh
spack install hdf5自定义版本与配置
Spack 允许对安装进行自定义。用户可以在命令行中指定版本、编译时选项和目标架构。
# Install a particular version by appending @
$ spack install hdf5@1.14
# Add special compile-time options by name
$ spack install hdf5@1.14 api=v110
# Add special boolean compile-time options with +
$ spack install hdf5@1.14 +hl
# Add compiler flags using the conventional names
$ spack install hdf5@1.14 cflags="-O3 -floop-block"
# Target a specific micro-architecture
$ spack install hdf5@1.14 target=icelake用户可以按需指定选项,数量不限。对于未指定的配置,Spack 会自动填充合理的默认值。
自定义依赖
Spack 允许对特定安装的依赖项进行深度自定义。用户可以使用 % 符号指定软件包的直接依赖,或使用 ^ 符号指定传递性依赖。
# Install hdf5 using gcc@15 as a compiler (direct dependency of hdf5)
$ spack install hdf5@1.14 %gcc@15
# Install hdf5 using hwloc with CUDA enabled (transitive dependency)
$ spack install hdf5@1.14 ^hwloc+cuda命令行中的表达式可以根据用户的需求,简单或复杂。
# Install hdf5 compiled with gcc@15, linked to mpich compiled with gcc@14
$ spack install hdf5@1.14 %gcc@15 ^mpich %gcc@14非破坏性安装
Spack 将每一个唯一的软件包/依赖配置安装到其独立的目录前缀中,因此新安装不会破坏现有的安装。
软件包可和平共存
Spack 通过使用 RPATH 链接依赖项,避免了库配置错误。当用户链接库或运行程序时,它会绑定到构建时所使用的依赖项,因此无需在运行时修改 LD_LIBRARY_PATH。
非特权用户安装
Spack 安装软件包无需管理员权限。你可以在任何选择的目录下安装软件,这使得在主目录或共享项目位置管理软件包变得十分容易,无需 sudo 访问权限。
从源码及二进制安装
Spack 的核心优势在于能从源代码创建高度定制化、经过优化的软件构建。虽然它主要是一个基于源码的软件包管理器,但也通过构建缓存支持快速的二进制安装。
贡献非常简单
Spack 的软件包是简单的 Python 脚本。spack create 命令会生成样板文件让你快速上手,只需几分钟即可创建一个软件包。你只需编写构建指令,Spack 就会为你构建依赖项。
from spack_repo.builtin.build_systems.autotools import AutotoolsPackage
from spack.package import *
class Libelf(AutotoolsPackage):
"""Libelf is a library for handling ELF files."""
homepage = "https://example.com"
url = "https://example.com/libelf-0.8.13.tar.gz"
license("LGPL-2.0-only")
version("0.8.13", sha256="bab128d2328a84181b22eefef54af7122a16b39672046ada16107a2147033575")
version("0.8.12", sha256="61a9dfef3e0a59e58d381887e9d69a9267a42b7ccca3b3da68c658aa39ba5dc2")
depends_on("c", type="build")
def configure_args(self):
return ["--enable-shared"]参与其中!
访问 GitHub 上的 Spack 并参加教程。加入 Slack 讨论,并了解如何贡献你自己的软件包。查看即将举办的活动页面,了解教程、研讨会、BoFs 等信息。