ALPS (Algorithms and Libraries for Physics Simulations),是一个可以用来做 MC Simulation 的开源软件。这周末研究了很久绕了很多弯路,才配置好了开发环境,故在此简单做个纪录。
下载和安装
首先我们进入 ALPS 的官网,那里提供了好几种下载方式:
首先他们推荐的方式是: 即用 conda 来安装 ALPS。但是我
conda install alps
失败了好几次,错误提示是 ALPS 只支持 Python 2.7!所以不想麻烦的我选择了另一种看上去更简单的方式——直接下载编译好的二进制文件,但这样安装后还要再安装一个叫 VisTrails 的软件,然后才能在终端调用 vispython
命令运行 ALPS 的 Python 代码。但很快我就发现这种方式最大的弊端:Pycharm 无法识别 vispython
这个解释器,VS Code 虽然可以在 task.json 中指定其路径,但也无法在 settings.json 中指定其为 python 解释器,更无法 debug。
其它的方式如从源文件编译或者 Docker 容器我并没有尝试,最终我又绕回了 Anaconda。只能先用 conda 新建一个 2.7 的环境:
conda create –name alps_test python=2.7
然后激活新环境
conda activate alps_test
此时终端 ps1 前会显示当前激活的环境名,不习惯的话可以用
conda config –set changeps1 false
来隐藏,还有一些常用的 conda 命令比如 conda env list
列出所有环境,conda deactivate
退出环境,和 conda env remove -n [env_name]
删除环境。之后我们只要再
conda install alps
就好了。但是这样子安装好的 ALPS 在 PyCharm 和 VS Code 中还是有很多问题。
PyCharm
首先说说 PyCharm,ALPS 在 PyCharm 中最大的问题就是根本无法运行,我看了代码的错误提示,似乎是 hdf5 版本的问题,解决办法就是先安装 hdf5:
conda install hdf5=1.8.17
根据我的测试 1.8.17 版本的 HDF5 在 masOS Catalina 10.15.7 上能正常编译 ALPS。安装完 HDF5 后我们再重新安装 ALPS:conda install alps
,这样就能成功在 PyCharm 中运行和调试 ALPS 代码了。
VS Code
在 VS Code 中用 task.json 运行任务貌似不会改变 Python 环境,即使已经选择了新的 Python 2.7 为解释器(选择新解释器只能正确显示 2.7 版本的 Python 格式、代码补全和变量索引),所以我们需要在 /bin/sh (这是 VS Code 的 task.json 任务执行所用的终端)的配置文件(.bashrc
或 .bash_profile
)中添加新环境的路径
export PATH=”~/anaconda/envs/py27/bin:$PATH”
这样我们不用 activate 也能直接调用新环境下的命令。注意如果你用的是其它 shell,比如 zsh,仍是在原来的 .bashrc
中修改而非在 .zshrc
中。(但需注意的是,根据我后期使用 ALPS 和自己修改源代码再重新编译 ALPS 的经验,这样添加环境变量其实比较危险)
其次,由于 Python 2.7 的编码问题,文件路径里不能出现中文!不然会报 decode 的错误。
VS Code 小技巧
可以安装 autopep8 和 flake8,在设置里 enable
"python.linting.flake8Enabled": true,
"python.formatting.provider": "autopep8"
"python.linting.flake8Args": ["--max-line-length=248"],
"python.linting.enabled": true,
这样 VS Code 就会检查 Python 代码的格式是否标准,而且还可以用快捷键 shift + alt + F
来自动调整格式,甚至可以直接设置在保存或关闭文件时自动调整格式!
重新编译
现版本的 ALPS 可能不满足我们的需求,我们要修改 ALPS 的源代码再重新编译。
- 首先卸载已有的 ALPS
conda remove alps
-
然后在官网上下载 ALPS 和 Boost 库的源代码,解压后进入目录,进行自定义修改,比如我要修改
spinmc
部分,就对应于alps/applications/mc/spins/
中的代码,特别是其中的spinsim.h
和abstractspinsim
两个头文件。 - 修改完成后回到 ALPS 主目录,新建一个
build
文件夹,进入后直接cmake -D Boost_ROOT_DIR:PATH=../boost ../alps
- 但这样在 Mac 上编译可能有些问题,得加些参数
CXXFLAGS=”-std=c++11 -stdlib=libc++” LDFLAGS=”-stdlib=libc++” cmake -D CMAKE_INSTALL_PREFIX=~/anaconda/envs/alps_test/ Boost_ROOT_DIR:PATH=../boost ../alps
- 再
make
和make install
进行安装。但这样编译出的 ALPS 在我的 Mac 上还是有些问题,所以我只能迂回作战了。比如在我使用的 ALPS python 代码中调用了spinmc
这个二进制可执行文件,那我就进入~/anaconda/envs/alps_test/bin/
中将我们新编译的spinmc
重命名为my_spinmc
,再用conda install alps
重新安装一遍正确的 ALPS 库。之后在 python 代码中不再调用spinmc
而是新编译的my_spinmc
, 这样就一切 OK 了!
总结
未完待续,内容仍有待补充…
🎉 🎉 🎉

