SciPy网站以前提供了编译和安装说明,但现在的说明仅仅依赖于操作系统二进制发行版。如果要在没有所需库的预编译包的操作系统上构建SciPy(和NumPy),则必须构建并静态链接Fortran库BLAS和LAPACK:
mkdir -p ~/src/
cd ~/src/
wget http://www.netlib.org/blas/blas.tgz
tar xzf blas.tgz
cd BLAS-*
gfortran -O3 -std=legacy -m64 -fno-second-underscore -fPIC -c *.f
ar r libfblas.a *.o
ranlib libfblas.a
rm -rf *.o
export BLAS=~/src/BLAS-*/libfblas.a
只执行五个g77/gfortran/ifort命令中的一个。我已经注释掉所有命令,但保留了我使用的gfortran命令。接下来安装LAPACK需要Fortran 90编译器,并且由于两次安装都应该使用相同的Fortran编译器,因此BLAS不应该使用g77。
接下来,您需要安装LAPACK。SciPy网页的说明也对我在这方面提供了帮助,但我必须修改它们以适应我的环境:
mkdir -p ~/src
cd ~/src/
wget http://www.netlib.org/lapack/lapack.tgz
tar xzf lapack.tgz
cd lapack-*/
cp INSTALL/make.inc.gfortran make.inc # On Linux with lapack-3.2.1 or newer
make lapacklib
make clean
export LAPACK=~/src/lapack-*/liblapack.a
2015年9月3日更新:
今天已验证一些评论(感谢大家):在运行make lapacklib
之前,编辑make.inc
文件并将-fPIC
选项添加到OPTS
和NOOPT
设置中。如果您使用的是64位架构或想要编译为64位架构,请同时添加-m64
。BLAS和LAPACK必须使用相同的选项进行编译。如果您忘记使用-fPIC
,SciPy实际上会给出一个关于缺少符号的错误,并建议使用此开关。在我的设置中,make.inc
的具体部分如下:
FORTRAN = gfortran
OPTS = -O2 -frecursive -fPIC -m64
DRVOPTS = $(OPTS)
NOOPT = -O0 -frecursive -fPIC -m64
LOADER = gfortran
在旧机器上(例如RedHat 5),gfortran可能安装的是较旧的版本(例如4.1.2),不支持选项-frecursive
。在这种情况下,只需从make.inc
文件中删除它。
由于无法找到blas库,Makefile的lapack测试目标在我的设置中失败了。如果您很细致,可以将blas库暂时移动到指定位置进行lapack测试。我是一个懒惰的人,所以我相信开发人员已经使其正常工作,并仅在SciPy中验证。