故障排除

如果你遇到了任何问题,首先检查所有的服务都已经开启并运行 :

$ verdi status

✓ profile:     On profile django
✓ repository:  /repo/aiida_dev/django
✓ postgres:    Connected as aiida@localhost:5432
✓ rabbitmq:    Connected as amqp://127.0.0.1?heartbeat=600
✓ daemon:      Daemon is running as PID 2809 since 2019-03-15 16:27:52

在输出实例中,所有服务都是绿色的,因此能够入预期的运行。如果所有服务都开启并运行,但你还是遇到问题,或在安装aiida-core和相关服务的过程中喷到问题,考虑是否是以下常见问题。

安装时可能出现的问题

numpy依赖

在纯净版的 Ubuntu 16.04 系统中,用pip运行 pip install -e aiida_core 可能会遇到对 numpy 的依赖问题,而使安装失败。遇到这种情况,会有如下报错信息 :

from numpy.distutils.misc_util import get_numpy_include_dirs
ImportError: No module named numpy.distutils.misc_util

只需要单独在虚拟环境中使用pip安装 numpy 包即可 :

$ pip install numpy

然后再次执行原来的安装指令 :

$ pip install -e aiida-core

这就可以修复该依赖错误。

数据库的安装及其位置

如果安装过程出错的是由于数据库导致的,你可能没有安装或正确设置数据库。

尤其在Mac OS X中,如果你安装了二进制的PostgreSQL包,那么及有可能环境变量PATH的设置不是预期的,你会得到这样一个错误 “Error: pg_config executable not found.” 。遇见该情况,寻找正确的二进制文件的位置,然后将该路径加入 ~/.bashrc 中,如下 :

export PATH=/the/path/to/the/pg_config/file:${PATH}

之后打开一个新的bash shell。 可能的路径可以在 Stackoverflow link 中找到,或如下列表中(版本号可能不同):

  • /Applications/Postgres93.app/Contents/MacOS/bin

  • /Applications/Postgres.app/Contents/Versions/9.3/bin

  • /Library/PostgreSQL/9.3/bin/pg_config

同样的,如果软件包已经安装,但是在AiiDA开始运行的过程中出现 (如 Symbol not found 或类似的错误),你可能需要指定动态库安装的位置。其中一个方法是在 ~/.bashrc 中增加如下一行并打开一个新的shell :

export DYLD_FALLBACK_LIBRARY_PATH=/Library/PostgreSQL/9.3/lib:$DYLD_FALLBACK_LIBRARY_PATH

(你必须将路径加入PostgreSQL库中)

自动检测PostgreSQL设置

有时AiiDA在运行``verdi quicksetup``时无法自动检测PostgreSQL的本地配置。在这种情况下,尝试:

  1. 在PostgreSQL中手动创建数据库(见:ref:这里<intro:install:database>)。

  2. 然后运行完整的 verdi setup 命令(参见:ref:这里<intro:install:verdi_setup>)。

RabbitMQ 的安装(Unix)

如果你看到 verdi status 的输出显示RabbitMQ 没有正确连接,首先检查确定 RabbitMQ 已经正确运行:

$ sudo rabbitmqctl status
Status of node rabbit@ph-tsm15-025 ...
[{pid,86960},
...
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{http,15672,"::"}]},

默认的AiiDA配置档案将通过 amqp://guest:guest@127.0.0.1:5672 连接RabbitMQ,因此该网络端口需要开启。在Linux / Mac OSX 你可以用以下命令查看PID使用的端口:

$ sudo lsof -Pan -p 86960 -i
COMMAND    PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
beam.smp 98979 user1   75u  IPv4 0x9d838dc03d5a2485      0t0  TCP *:25672 (LISTEN)
beam.smp 98979 user1   76u  IPv4 0x9d838dc047588625      0t0  TCP 127.0.0.1:58316->127.0.0.1:4369 (ESTABLISHED)
beam.smp 98979 user1   86u  IPv6 0x9d838dc034033ea5      0t0  TCP *:5672 (LISTEN)
beam.smp 98979 user1   87u  IPv4 0x9d838dc018071a15      0t0  TCP *:15672 (LISTEN)

如果连接没有被找到,尝试不退出地启动 rabbitmq-server。 如果你遇见如下输出,那么可能时由于你的RabbitMQ版本和erlang(编写RabbitMQ的编程语言)不兼容导致的。

$ rabbitmq-server
BOOT FAILED

===========


Error description:

   noproc


Stack trace:

   []

Error description:

   noproc

{"init terminating in do_boot",noproc}

init terminating in do_boot (noproc)


Crash dump is being written to: erl_crash.dump...done

你可以使用下列命令查看erlang版本:

$ erl -eval '{ok, Version} = file:read_file(filename:join([code:root_dir(), "releases", erlang:system_info(otp_release), "OTP_VERSION"])), io:fwrite(Version), halt().' -noshell
21.3

以及查看 rabbitmq-server的版本:

$ rabbitmqctl --version
3.7.16

然后对照 RabbitMQ Erlang 版本需求 来检查版本是否兼容,并修改重启服务。

更多资料请参看 RabbitMQ 故障排除

确保使用 UTF-8 编码

出于一些原因,在一些机器上 (通常是 Mac OS X) 时没有默认的区域设置的,当你首次运行 verdi setup 时会出错 (同时参考django相关 问题 )。在终端中运行 (最好能够在文件 .bashrc 中加入,但要记得重新打开一个shell)下列代码 :

export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"

然后重新运行 verdi setup

Ubuntu的版本依赖

有多位用户反映需要安装 libpq-dev ( libpq5 库所需的头文件 - PostgreSQL library):

$ apt-get install libpq-dev

这在 Ubuntu 12.04 上时不需要的。

verdi 不再可执行路径 PATH中

安装 aiida-core python 包 本应verdi 命令行可执行程序自动加入你的 PATH 环境变量中。

如果 verdi 可执行程序在你的终端中不可用,那么 pip 安装的软件的路径可能没有被加入你的 PATH 环境变量中

对于Linux系统,这个文件夹通常为 ~/.local.bin

export PATH=~/.local/bin:${PATH}

在Mac OS X 系统中,路径通常是 ~/Library/Python/2.7/bin

export PATH=~/Library/Python/2.7/bin:${PATH}

在你更新了 PATH 环境变量后,verdi 命令就可以被使用了。

注解

verdi 能够使用的前提是 aiida python包是可以载入的。要检验是否可以载入,打开 pythonipython shell并键入 :

import aiida

如果你得到一个 ImportError (并且你已经在AiiDA安装的环境中),你可以手动将其加入 PYTHONPAHT 中 :

export PYTHONPATH="${PYTHONPATH}:<AiiDA_folder>"

配置远程可SSH计算机

安装 ssh_kerberos

如果在Ubuntu机器上使用Anaconda,并安装 ssh_kerberos ( 可选 ) 依赖时,你可能会遇见下列错误 :

version 'GFORTRAN_1.4' not found (required by /usr/lib/libblas.so.3)

这是由anaconda的一个已知问题 ContinuumIO/anaconda-issues#686 导致的。 可能的解决办法是运行下列命令 :

$ export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgfortran.so.3

远端计算资源上由 .bashrc 或 .bash_profile 产生的输出

注解

这同样适用于通过 local 传输配置的计算资源。

当连接远端计算机时, 如果你在 .bashrc.bash_profile 文件中加入了会输出一些输出的代码 ,AiiDA (如指令 sftp) 会出现问题。如,当运行了命令如 clean

比如,如果你在 .bashrc 中加入 echo "a" ,并试图SFTP一个文件。你将会得到如 Received message too long 1091174400 这样的错误。

如果你依然想要保留一个交互的shell的代码(如 echoclean ,……),但你又想在非交互的shell中关闭它,将以下代码加入你的配置文件中 :

if [[ $- != *i* ]] ; then
# Shell is non-interactive.  Be done now!
return
fi

下面的这些将不会在非交互的shell中执行。

注解

如果你想在非交互shell中执行一些指令,你还是要将这些代码在文件的开始位置,比如设置PATH环境变量或类似的操作。

要检测一台你设置的机器是否会输出不必要的信息,你可以运行(在配置之后):

$ verdi computer test <COMPUTERNAME>

这会执行一个检查,以避免出现错误,若出现错误,会告知解决办法。

注解

如果上面的方法没用,您可以配置AiiDA时不使用登录shell连接到你的电脑,可以防止远端的的提示性输出:在 verdi computer configure , 设置 -no-use-login-shell 或要求使用登录shell时,将其设置为 False. 但是,请注意,这可能会导致一个稍微不同的环境,因为 某些启动文件只被登录shel 加载

其他软件的依赖

打开ASE视图器

在虚拟环境中,尝试用 ase 来可视化查看结构时(通过 shell 运行或是使用命令 verdi data structure show --format=ase <PK>),可能会有以下错误

ImportError: No module named pygtk

这是因为 pygtk 目前还不能通过pip安装。需要单独安装它并在虚拟环境中手动添加一些合适的软链接。可以按照以下步骤来解决此问题:

安装 python-gtk2 包。在Ubuntu中可按以下步骤 :

$ sudo apt-get install python-gtk2

在虚拟环境中创建 lib/python2.7/dist-packages 文件夹

$ mkdir <AIIDA_VENV_FOLDER>/lib/python2.7/dist-packages
$ chmod 755 <AIIDA_VENV_FOLDER>/lib/python2.7/dist-packages

<AIIDA_VENV_FOLDER> 表示安装过程中创建的虚拟环境文件夹。

在此文件夹中新建几个软链接指向 /usr/lib/python2.7/dist-packages/ 中的文件 :

$ cd <AIIDA_VENV_FOLDER>/lib/python2.7/dist-packages
$ ln -s /usr/lib/python2.7/dist-packages/glib glib
$ ln -s /usr/lib/python2.7/dist-packages/gobject gobject
$ ln -s /usr/lib/python2.7/dist-packages/gtk-2.0 gtk-2.0
$ ln -s /usr/lib/python2.7/dist-packages/pygtk.pth pygtk.pth
$ ln -s /usr/lib/python2.7/dist-packages/pygtk.py pygtk.py
$ ln -s /usr/lib/python2.7/dist-packages/cairo cairo

之后就可成功运行 verdi data structure show --format=ase <PK>

在ipython/jupyter中使用

为了在Jupyter中使用AiiDA的对象与函数,需要指定使用安装在AiiDA虚拟环境中的iPython内核。如果使用 pip 同时安装了 AiiDA 与 notebook 的话,之后再在AiiDA虚拟环境中启动Jupyter,那么会默认使用AiiDA虚拟环境中的iPython内核。

如果不想把Jupyter装在虚拟环境之中,那么要确保虚拟环境之外已安装了Jupyter,可以用如下命令安装 :

$ pip install jupyter

之后,激活AiiDA虚拟环境 :

$ source ~/<aiida.virtualenv>/bin/activate

并设置内核为AiiDA iPython内核 :

$ pip install ipykernel
$ python -m ipykernel install --user --name=<aiida.kernel.name>

给这个新建的内核取一个有意义的名字。

最后,如下命令开启Jupyter服务 :

$ jupyter notebook

在新打开的浏览器标签中选择 新建(New) -> <aiida.kernel.name>

增加日志输出详细程度

默认情况下,AiiDA的日志级别是最小的,以避免冗余信息塞满日志文件。只有警告(warnings)和错误(errors)被记录到守护进程日志文件中,而信息(info)和调试(debug)消息被丢弃。

如果遇到问题,可以更改AiiDA的默认最低日志记录级别 :

$ verdi config logging.aiida_loglevel DEBUG

您可能还对 circus 日志消息感兴趣( circus 库是管理守护进程运行器的后台进程),

$ verdi config logging.circus_loglevel DEBUG

但是这些消息通常只在对AiiDA内部代码进行调试时有用。

对于每个运行守护进程的概要文件,将有惟二的日志文件,一个用于AiiDA日志消息(名为’ aiida-<profile_name>.log ),另一个用于 circus日志(名为 circus-<profile_name>.log )。这些文件可以在 ~/.aiida/daemon/log 文件夹找到。

重启守护进程( verdi daemon restart )后,记录的消息数量将显著增加,这可能有助于定位代码问题。

注解

您可以使用与 DEBUG 不同的级别。级别列表及其顺序与 standard Python logging module 相同。除了标准日志级别之外,我们还定义了自定义的 REPORT 级别,其值为 23 ,位于标准 INFOWARNING 级别之间。AiiDA 的默认级别设为``REPORT`` ,用于报告工作链消息使用的日志记录。

当问题解决后,我们建议恢复默认日志级别:

$ verdi config logging.circus_loglevel --unset
$ verdi config logging.aiida_loglevel --unset

以免过多的冗余信息塞满日志文件。

当前配置文件设置的配置选项,可以通过下面命令查看:

$ verdi profile show

option 行。