通过 setup.py 安装 H5py,未定义符号:iso_c_binding_

H5py installation via setup.py, undefined symbol: iso_c_binding_

我正在根据 http://docs.h5py.org/en/latest/build.html 上的教程安装 h5py 安装成功。然而,测试失败,

python setup.py test

我知道了:

running test
running build_py
running build_ext
Summary of the h5py configuration
Path to HDF5: '/opt/cray/hdf5-parallel/1.8.13/cray/83/'
HDF5 Version: '1.8.13'
MPI Enabled: True
Rebuild Required: False

Executing cythonize()
Traceback (most recent call last):
File "setup.py", line 140, in <module>
cmdclass = CMDCLASS,
File "/python/2.7.9/lib/python2.7/distutils/core.py", line 151, in setup    
dist.run_commands()
File "/python/2.7.9/lib/python2.7/distutils/dist.py", line 953, in run_commands    
self.run_command(cmd)
File "/python/2.7.9/lib/python2.7/distutils/dist.py", line 972, in run_command    
cmd_obj.run()
File "setup.py", line 68, in run 
import h5py
File "/h5py-2.5.0/build/lib.linux-x86_64-2.7/h5py/__init__.py", line 13, in <module>
from . import _errors
**ImportError:** /opt/cray/lib64/libmpichf90_cray.so.3: undefined symbol: iso_c_binding_

看来 cython 找不到共享库,我该如何附加它?谢谢。

(针对并行构建进行了编辑)

我使用以下方法在 Cray XC30(ARCHER:http://www.archer.ac.uk)上运行:

module swap PrgEnv-cray PrgEnv-gnu
module load cray-hdf5-parallel
export CRAYPE_LINK_TYPE=dynamic
export CC=cc

ARCHER 在计算节点上有针对 Python 环境的特定模块,link 到 numpy 等的高性能版本(参见:http://www.archer.ac.uk/documentation/user-guide/python.php)所以我也加载了这些(这可能不适用于您的 Cray 系统,在 ARCHER 的情况下,mpi4py 已经包含在 python-compute 安装中):

module load python-compute
module load pc-numpy

最后,我将用于 h5py 的自定义安装位置添加到 PYTHONPATH

export PYTHONPATH=/path/to/h5py/install/lib/python2.7/site-packages:$PYTHONPATH

现在我可以构建:

python setup.py configure --mpi
python setup.py install --prefix=/path/to/h5py/install
...lots of output...

现在,运行前端节点上的测试失败了,但如果您尝试在 login/service 节点上启动 MPI 代码,我希望在 Cray XC 上看到错误消息(无法初始化通信通道,login/service 节点未连接到高性能网络,因此无法 运行 MPI 代码)。这向我表明,如果在计算节点上 运行ning 测试可能会成功。

> python setup.py test
running test
running build_py
running build_ext
Autodetected HDF5 1.8.13
********************************************************************************
                   Summary of the h5py configuration

Path to HDF5: '/opt/cray/hdf5-parallel/1.8.13/GNU/49'
HDF5 Version: '1.8.13'
 MPI Enabled: True
Rebuild Required: False

********************************************************************************
Executing cythonize()
[Thu Oct 22 19:53:01 2015] [unknown] Fatal error in PMPI_Init_thread: Other MPI error, error stack:
MPIR_Init_thread(547): 
MPID_Init(203).......: channel initialization failed
MPID_Init(579).......:  PMI2 init failed: 1 
Aborted

要正确测试,您必须提交一个使用 ap运行 在计算节点上启动并行 Python 脚本的作业。我不认为内置的测试框架会很容易工作,因为它可能希望 MPI 启动器被称为 mpiexec(就像在标准集群上一样),因此您可能需要编写自己的测试。另一种选择是强制 setup.py 以某种方式使用 ap运行。