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

Posted

技术标签:

【中文标题】通过 setup.py 安装 H5py,未定义符号:iso_c_binding_【英文标题】:H5py installation via setup.py, undefined symbol: iso_c_binding_ 【发布时间】:2016-01-19 21:28:54 【问题描述】:

我正在根据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 找不到共享库,我该如何附加它?谢谢。

【问题讨论】:

就个人而言,我会联系您的超级计算机的技术支持。他们通常可以为您解决这些问题。 【参考方案1】:

(为并行构建而编辑)

我使用以下方法在 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 环境的特定模块,这些模块链接到 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...

现在,在前端节点上运行测试失败,但如果您尝试在登录/服务节点上启动 MPI 代码(无法初始化通信通道、登录/服务节点未连接到高性能网络,因此无法运行 MPI 代码)。这向我表明,如果测试在计算节点上运行,它可能会起作用。

> 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

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

【讨论】:

终于通过了测试,非常感谢@AndyT。我不知道发生了什么,我觉得我没有错过任何步骤。但是,完全按照您的步骤操作,错误就消失了。谢谢。 很高兴它正在工作。如果解决了问题,别忘了接受上面的答案。

以上是关于通过 setup.py 安装 H5py,未定义符号:iso_c_binding_的主要内容,如果未能解决你的问题,请参考以下文章

Mac 上的 h5py setup.py:找不到 hdf5.h 文件

python setup.py安装错误LNK2019:函数致命错误LNK1120中引用的无法解析的外部符号fmin:

Pip 可以在安装时安装 setup.py 中未指定的依赖项吗?

SWIG + setup.py:ImportError:动态模块未定义初始化函数(init_foo)

从自定义索引 setup.py 安装

如何在 Python 的 setup.py 中包含和安装本地依赖项?