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

就好了。但是这样子安装好的 ALPSPyCharmVS Code 中还是有很多问题。

PyCharm

首先说说 PyCharmALPSPyCharm 中最大的问题就是根本无法运行,我看了代码的错误提示,似乎是 hdf5 版本的问题,解决办法就是先安装 hdf5:

conda install hdf5=1.8.17

根据我的测试 1.8.17 版本的 HDF5masOS Catalina 10.15.7 上能正常编译 ALPS。安装完 HDF5 后我们再重新安装 ALPSconda install alps,这样就能成功在 PyCharm 中运行和调试 ALPS 代码了。

VS Code

VS Code 中用 task.json 运行任务貌似不会改变 Python 环境,即使已经选择了新的 Python 2.7 为解释器(选择新解释器只能正确显示 2.7 版本的 Python 格式、代码补全和变量索引),所以我们需要在 /bin/sh (这是 VS Codetask.json 任务执行所用的终端)的配置文件(.bashrc.bash_profile)中添加新环境的路径

export PATH=”~/anaconda/envs/py27/bin:$PATH”

这样我们不用 activate 也能直接调用新环境下的命令。注意如果你用的是其它 shell,比如 zsh,仍是在原来的 .bashrc 中修改而非在 .zshrc 中。(但需注意的是,根据我后期使用 ALPS 和自己修改源代码再重新编译 ALPS 的经验,这样添加环境变量其实比较危险)

其次,由于 Python 2.7 的编码问题,文件路径里不能出现中文!不然会报 decode 的错误。

VS Code 小技巧

可以安装 autopep8flake8,在设置里 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

  • 然后在官网上下载 ALPSBoost 库的源代码,解压后进入目录,进行自定义修改,比如我要修改 spinmc 部分,就对应于 alps/applications/mc/spins/ 中的代码,特别是其中的 spinsim.habstractspinsim 两个头文件。

  • 修改完成后回到 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

  • makemake install 进行安装。但这样编译出的 ALPS 在我的 Mac 上还是有些问题,所以我只能迂回作战了。比如在我使用的 ALPS python 代码中调用了 spinmc 这个二进制可执行文件,那我就进入 ~/anaconda/envs/alps_test/bin/ 中将我们新编译的 spinmc 重命名为 my_spinmc ,再用 conda install alps 重新安装一遍正确的 ALPS 库。之后在 python 代码中不再调用 spinmc 而是新编译的 my_spinmc, 这样就一切 OK 了!

总结


未完待续,内容仍有待补充…

🎉 🎉 🎉

Go to the Home Page

Sponsor the author if you like the contents!