在 Mac/Linux 上从源码安装 ALPS
在大多数情况下,建议通过二进制包安装 ALPS。但若需更多用户控制和配置,从源码安装可能是更好的选择。
安装必要依赖项
ALPS 依赖多个外部库。
请根据系统选择 一个 MPI 实现和 一个 BLAS 提供方:
| 依赖项 | 最低版本 | 安装包 |
|---|---|---|
| HDF5 | 1.10.0 | libhdf5-dev |
| CMake | 3.18 | cmake |
| C++ 编译器 | GCC 10.5.0 或 Clang 13.0.1 | build-essential |
| Boost | 1.76 (若 NumPy ≥ 2.0 需 1.87) | 见下文 |
| MPI | OpenMPI 4.0 或 MPICH 4.0 | libopenmpi-dev / libmpich-dev |
| BLAS | 0.3 | libopenblas-dev |
| Python | 3.9 | python.org |
Ubuntu / Debian / WSL
$ sudo apt update
$ sudo apt install build-essential cmake \
libhdf5-dev \
libopenblas-dev \
libopenmpi-dev openmpi-bin # 或: libmpich-dev mpich
# 安装 Python 库:
$ pip install numpy scipy
# 或
$ python3 -m pip install numpy scipy请勿通过
apt安装 Boost。 ALPS 必须从源码编译 Boost,原因有二:
- 自定义编译器标志 — ALPS 需要
-DBOOST_NO_AUTO_PTR和-DBOOST_FILESYSTEM_NO_CXX20_ATOMIC_REF以兼容 C++17/20;libboost-dev软件包不设置这些标志,会导致链接错误。- Python ABI 匹配 —
Boost.Python组件必须针对 ALPS 使用的同一 Python 解释器进行编译。预构建软件包针对系统 Python,若使用其他解释器则会出现不匹配。CMake 会自动处理:若未设置
Boost_SRC_DIR,则在配置时下载并编译 Boost 1.87(需要网络连接)。如需离线构建,请参阅下方编译步骤中的替代方案。
macOS (通过 Homebrew)
$ brew update
$ brew install cmake hdf5 \
openblas open-mpi # 或: mpich
# 安装 Python 库:
$ pip3 install numpy scipy请勿通过 Homebrew 安装 Boost。 ALPS 必须从源码编译 Boost,原因有二:
- 自定义编译器标志 — ALPS 需要
-DBOOST_NO_AUTO_PTR和-DBOOST_FILESYSTEM_NO_CXX20_ATOMIC_REF以兼容 C++17/20;Homebrew 的boostformula 不设置这些标志,会导致链接错误。- Python ABI 匹配 —
Boost.Python组件必须针对 ALPS 使用的同一 Python 解释器进行编译。Homebrew Boost 针对 Homebrew 自带的 Python,与其他解释器会出现不匹配。CMake 会自动处理:若未设置
Boost_SRC_DIR,则在配置时下载并编译 Boost 1.87(需要网络连接)。如需离线构建或复用已解压的存档,请先手动下载:$ curl -LO https://archives.boost.io/release/1.87.0/source/boost_1_87_0.tar.gz $ tar -xzf boost_1_87_0.tar.gz
macOS (通过 MacPorts)
$ sudo port selfupdate
$ sudo port install cmake \
hdf5 \
OpenBLAS \
openmpi-clang20 # 请参阅下方关于选择变体的说明
$ sudo port select --set mpi openmpi-clang20-fortran
# 安装 Python 库:
$ pip3 install numpy scipy选择 OpenMPI 变体: MacPorts 为每个编译器版本提供独立的端口,命名为
openmpi-<compiler><version>(例如openmpi-clang20、openmpi-gcc15)。上示的clang20变体对应 LLVM Clang 20 端口,可与 Xcode 的 Apple Clang 共存。若使用不同编译器,请安装对应变体并相应调整port select命令。
port select步骤是必须的:若不执行此步骤,CMake 搜索的裸mpirun、mpicc、mpicxx包装器将不存在。
请勿通过 MacPorts 安装 Boost。 ALPS 必须从源码编译 Boost,原因有二:
- 自定义编译器标志 — ALPS 需要
-DBOOST_NO_AUTO_PTR和-DBOOST_FILESYSTEM_NO_CXX20_ATOMIC_REF以兼容 C++17/20;MacPorts 的boost端口不设置这些标志,会导致链接错误。- Python ABI 匹配 —
Boost.Python组件必须针对 ALPS 使用的同一 Python 解释器进行编译。MacPorts Boost 针对 MacPorts 自带的 Python,与其他解释器会出现不匹配。CMake 会自动处理:若未设置
Boost_SRC_DIR,则在配置时下载并编译 Boost 1.87(需要网络连接)。如需离线构建或复用已解压的存档,请先手动下载:$ curl -LO https://archives.boost.io/release/1.87.0/source/boost_1_87_0.tar.gz $ tar -xzf boost_1_87_0.tar.gz
验证依赖项
$ gcc -v # 必须 ≥ 10.5.0
$ cmake --version # 必须 ≥ 3.18
$ mpirun --version # 需为 OpenMPI 4.0 或 MPICH 4
$ python3 --version # 必须 ≥ 3.9
$ python3 -c "import numpy, scipy; print('numpy', numpy.__version__, 'scipy', scipy.__version__)"macOS — CMake 将使用哪个 Python? macOS 上的 CMake 在搜索
$PATH之前会先搜索 Apple 的框架路径,即使通过 Homebrew 或 MacPorts 安装了更新版本的 Python,也可能默认选择 Xcode 自带的 Python 3.9。在cmake配置时,请查找如下输出行:-- Found Python: /path/to/python (found version "X.Y.Z")若路径或版本不符合预期,请在
cmake命令中添加-DPython3_EXECUTABLE=/path/to/your/python3显式指定。典型路径为/opt/homebrew/bin/python3(Homebrew)或/opt/local/bin/python3(MacPorts)。请确保 CMake 使用的 Python 已安装numpy和scipy。
下载与编译
现在可以下载并编译 ALPS 库。在以下命令中,请将 </path/to/install/dir> 替换为您系统的实际安装目录。
运行这些命令之前,请注意以下两个预期等待:
cmake配置(约 1–3 分钟): CMake 在配置时会静默下载 Boost 1.87(约 130 MB)。下载完成前终端将无任何输出,等待一两分钟是正常的,请勿中断。cmake --build(5–20 分钟): 即使使用全部 CPU 核心,从源码编译 ALPS 和 Boost 也需要数分钟。终端将持续打印编译输出——这也是正常现象。
$ git clone https://github.com/alpsim/ALPS alps-src
$ cmake -S alps-src -B alps-build \
-DCMAKE_INSTALL_PREFIX=</path/to/install/dir> \
-DCMAKE_CXX_FLAGS="-DBOOST_NO_AUTO_PTR \
-DBOOST_FILESYSTEM_NO_CXX20_ATOMIC_REF"
# ^ Boost(约 130 MB)在此处下载;1–3 分钟内无输出属正常
$ cmake --build alps-build -j$(nproc 2>/dev/null || sysctl -n hw.logicalcpu)
$ cmake --build alps-build -t test
-j控制并行编译数。 上述表达式在 Linux(nproc)和 macOS(sysctl -n hw.logicalcpu)上均可自动使用全部逻辑 CPU 核心。也可手动指定,如 8 核时使用-j 8。
离线或低速连接构建: 默认情况下 CMake 在配置时下载 Boost 1.87。如需避免下载,请先手动解压存档并指定路径:
$ cmake -S alps-src -B alps-build \ -DCMAKE_INSTALL_PREFIX=</path/to/install/dir> \ -DBoost_SRC_DIR=</path/to/boost_1_87_0> \ -DCMAKE_CXX_FLAGS="-DBOOST_NO_AUTO_PTR \ -DBOOST_FILESYSTEM_NO_CXX20_ATOMIC_REF"
故障排除
- 需使用其他 MPI/BLAS?
将上述包名替换为您集群的模块(如 Intel MKL/OneAPI, AMD AOCL 等)。CMake 会自动定位这些包并生成编译指令。 - Python 错误
请确保 Python ≥ 3.9 已安装,且numpy和scipy安装在 CMake 所选的同一 Python 下。在 macOS 上,CMake 可能选择 Xcode 自带的 Python 而非 Homebrew/MacPorts 的 Python——请检查 CMake 输出中的Found Python:行,必要时使用-DPython3_EXECUTABLE=/path/to/python3指定解释器(参见验证依赖项步骤)。 - MPI 版本不匹配?
确保 CMake 使用的 MPI 版本与mpirun --version一致。 - Boost 错误
针对 NumPy ≥ 2.0 构建 ALPS Python 绑定需要 Boost ≥ 1.87(NumPy 2.0 引入的 API 变更仅 Boost 1.87+ 支持)。Boost 1.76–1.86 仅支持 NumPy < 2.0。已测试的编译器/Boost/Python 组合请参阅编译说明。
编译说明
以下 Boost、Python 和 C++ 编译器的组合已通过测试:
- GCC 10.5.0, Python 3.9.19 (NumPy < 2.0),
Boost1.76.0 - GCC 11.4.0, Python 3.10.14 (NumPy < 2.0),
Boost1.81.0, 1.86.0 - GCC 12.3.0, Python 3.10.14 (NumPy < 2.0),
Boost1.81.0, 1.86.0 - Clang 13.0.1, Python 3.10.14 (NumPy < 2.0),
Boost1.81.0, 1.86.0 - Clang 14.0.0, Python 3.10.14 (NumPy < 2.0),
Boost1.81.0, 1.86.0 - Clang 15.0.7, Python 3.10.14 (NumPy < 2.0),
Boost1.81.0, 1.86.0
NumPy ≥ 2.0 时,ALPS 的 Boost.Python 绑定需要 Boost 1.87.0 或更高版本(CMake 自动下载)。
若依赖包安装在非标准路径,CMake 可能无法定位。ALPS 使用标准 CMake 机制(FindXXX.cmake)定位包,可参考:
- MPI: 参考 cmake with mpi
- BLAS: 参考 cmake with BLAS
- HDF5: 参考 cmake with HDF5
成功编译后需执行安装。安装路径由配置时的 -DCMAKE_INSTALL_PREFIX=/path/to/install/directory 参数指定,也可在安装阶段通过 --prefix 参数修改(参见 cmake manual)。
运行安装命令:
$ cmake --install alps-build配置环境
安装目录是自包含的,但您的 shell 尚不知晓其位置。ALPS 提供了一个设置脚本,可将正确目录添加到 PATH、LD_LIBRARY_PATH 和 PYTHONPATH。使用 ALPS 前请先加载该脚本:
# bash / zsh:
$ source </path/to/install/dir>/bin/alpsvars.sh
# csh / tcsh:
$ source </path/to/install/dir>/bin/alpsvars.csh为避免每次打开新终端都需执行此命令,请将 source 行添加到 shell 启动文件(~/.bashrc、~/.zshrc 或 ~/.cshrc)中。
验证安装 — 运行任一 ALPS 可执行文件:
$ spinmc --help若命令可找到并打印帮助信息,则 ALPS 安装和环境配置均已成功。