红帽上Scipy和Scikit-learn中未定义的符号



我试图在64位Red Hat Enterprise 6.6服务器上安装Scikit-Learn,我没有root权限。我重新安装了Python 2.7.9、Numpy 1.9.2、Scipy 0.15.1和Scikit-Learn 0.16.1。服务器上的Atlas BLAS安装版本为3.8.4。

我可以安装scikit-learn,但是当我试图在Python中导入它时,我得到

File "<pyinstall>/site-packages/scipy/parse/linalg/isolve/_iterative.so: undefined symbol: slamch_"
同样,当我运行 时
>>> import scipy; scipy.test()

我得到16个错误,其中14个是以下未定义符号的importerror:

  • scipy/cluster/_vq.so: undefined symbol _gfortran_st_write_done
  • scipy/special/_ufuncs.so: undefined symbol dstevr_
  • scipy/linalg/_fblas.so: undefined symbol csyr_
  • scipy/lib/blas/fblas.so: undefined symbol slamch_
  • scipy/lib/lapack/flapack.so: undefined symbol sgbsv_
  • scipy/spatial/qhull.so: undefined symbol _gfortran_st_write_done
我研究

我发现的几个来源表明,这样的问题是因为编译BLAS/LAPack库和scipy时不匹配的Fortran编译器而发生的,例如,这个邮件交换和另一个2007年的邮件交换(没有链接,因为我的声誉不够高,不能包含另一个链接;它引用了_gfortran_st_write_done符号)。但是,BLAS构建是在只安装了gfortran的服务器上完成的(没有g77或Intel编译器),并且我重新编译了scipy以显式地使用gfortran。

scipy安装说明还提到,Atlas BLAS附带的LAPACK版本不是一个完整的实现,并且说如果安装的LAPACK缺少某些功能,可能会发生importerror。因此,我按照这里的说明安装了完整版的LAPACK 3.5.0,也是用gfortran编译的。然后,我重新编译scipy和sklearn,指向更新的库,并收到相同的导入错误。

我的问题除了不匹配的Fortran编译器之外,还有什么可能导致这些错误吗?或者,是否有另一个需要重新编译的库?

感谢Andreas Mueller的提示:将anaconda本地安装到我拥有的目录中,解决了编译问题。

相关内容

  • 没有找到相关文章

最新更新