¿Python SciPy necesita BLAS?

176
numpy.distutils.system_info.BlasNotFoundError: 
    Blas (http://www.netlib.org/blas/) libraries not found.
    Directories to search for the libraries can be specified in the
    numpy/distutils/site.cfg file (section [blas]) or by setting
    the BLAS environment variable.

¿Qué tar necesito descargar de este sitio?

He probado los fortrans, pero sigo recibiendo este error (después de configurar la variable de entorno, obviamente).

joedborg
fuente
Entonces, la pregunta es cuál es la versión correcta para que su sistema descargue de algún sitio, pero ni los detalles del sistema ni el sitio se dan en la pregunta No es sorprendente que no se obtuvieran respuestas.
Michael J. Barber

Respuestas:

143

La página web de SciPy solía proporcionar instrucciones de compilación e instalación, pero las instrucciones ahora se basan en distribuciones binarias del sistema operativo. Para compilar SciPy (y NumPy) en sistemas operativos sin paquetes precompilados de las bibliotecas requeridas, debe compilar y luego vincular estáticamente a las bibliotecas Fortran BLAS y LAPACK :

mkdir -p ~/src/
cd ~/src/
wget http://www.netlib.org/blas/blas.tgz
tar xzf blas.tgz
cd BLAS-*

## NOTE: The selected Fortran compiler must be consistent for BLAS, LAPACK, NumPy, and SciPy.
## For GNU compiler on 32-bit systems:
#g77 -O2 -fno-second-underscore -c *.f                     # with g77
#gfortran -O2 -std=legacy -fno-second-underscore -c *.f    # with gfortran
## OR for GNU compiler on 64-bit systems:
#g77 -O3 -m64 -fno-second-underscore -fPIC -c *.f                     # with g77
gfortran -O3 -std=legacy -m64 -fno-second-underscore -fPIC -c *.f    # with gfortran
## OR for Intel compiler:
#ifort -FI -w90 -w95 -cm -O3 -unroll -c *.f

# Continue below irrespective of compiler:
ar r libfblas.a *.o
ranlib libfblas.a
rm -rf *.o
export BLAS=~/src/BLAS-*/libfblas.a

Ejecute solo uno de los cinco comandos g77 / gfortran / ifort. He comentado todo, pero el gfortran que uso. La instalación posterior de LAPACK requiere un compilador Fortran 90 , y dado que ambas instalaciones deben usar el mismo compilador Fortran, g77 no debe usarse para BLAS.

A continuación, deberá instalar el material LAPACK. Las instrucciones de la página web de SciPy también me ayudaron aquí, pero tuve que modificarlas para adaptarlas a mi entorno:

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

Actualización el 3 de septiembre de 2015: verificó algunos comentarios hoy (gracias a todos): antes de ejecutar, make lapacklibedite el make.incarchivo y agregue la -fPICopción OPTSy la NOOPTconfiguración. Si está en una arquitectura de 64 bits o desea compilar una, también agregue -m64. Es importante que BLAS y LAPACK se compilen con estas opciones configuradas con los mismos valores. Si olvida que -fPICSciPy en realidad le dará un error sobre los símbolos que faltan y recomendará este interruptor. La sección específica de se make.incve así en mi configuración:

FORTRAN  = gfortran 
OPTS     = -O2 -frecursive -fPIC -m64
DRVOPTS  = $(OPTS)
NOOPT    = -O0 -frecursive -fPIC -m64
LOADER   = gfortran

En máquinas antiguas (p. Ej., RedHat 5), gfortran podría instalarse en una versión anterior (p. Ej., 4.1.2) y no comprende la opción -frecursive. Simplemente elimínelo del make.incarchivo en tales casos.

El objetivo de prueba lapack del Makefile falla en mi configuración porque no puede encontrar las bibliotecas de blas. Si es minucioso, puede mover temporalmente la biblioteca de blas a la ubicación especificada para probar el paquete. Soy una persona perezosa, así que confío en los desarrolladores para que funcione y verifique solo en SciPy.

cfi
fuente
55
Sin embargo, no hay libfblas en blas.tgz.
joedborg
32
Me funcionó, pero tuve que editar el make.incarchivo configurando OPTS = -O2 -fPICy NOOPT = -O0 -fPIC.
gui11aume
8
@jdborg aparentemente se llama solo liblapack.a ahora
una_dinosauria
77
Tuve que agregar las opciones -m64 a las configuraciones OPTS y NOOPT en el archivo make.inc. Solo ustedes están en una máquina de 64 bits, por supuesto.
mjspier
21
+1 ¡Muchas gracias por esto! Además, para scipy, tuve que hacer en export LAPACK=~/src/lapack-3.5.0/lugar de agregar libflapack.aal final.
Leyenda
328

Si necesita usar las últimas versiones de SciPy en lugar de la versión empaquetada, sin pasar por la molestia de construir BLAS y LAPACK, puede seguir el siguiente procedimiento.

Instalar bibliotecas de álgebra lineal desde el repositorio (para Ubuntu),

sudo apt-get install gfortran libopenblas-dev liblapack-dev

Luego instale SciPy, (después de descargar la fuente SciPy): python setup.py installo

pip install scipy

Según el caso puede ser.

AIB
fuente
11
¡Esto funcionó para mí, tks! Aunque tuve que cambiar libopenblas-deva libblas-dev(Ubuntu 10.04).
alfetopito
1
funcionó perfectamente para mí ejecutando Mint 13 (horquilla precisa). Necesita descargar la fuente por separado, si usa easy_install -U #update
wbg
2
Funcionó a la perfección. No tuve que hacer nada diferente en mi caso (ubuntu 12.0.4)
MisterWalrus
1
sudo apt-get install python-devarreglado. stackoverflow.com/a/21530768/125507
endolith
3
sudo yum install blas-devel lapack-develfuncionó para mí
Roman
66

En Fedora, esto funciona:

 yum install lapack lapack-devel blas blas-devel
 pip install numpy
 pip install scipy

Recuerde instalar ' lapack-devel ' y ' blas-devel ' además de 'blas' y 'lapack'; de lo contrario, obtendrá el error que mencionó o el error "numpy.distutils.system_info. LapackNotFoundError ".

Muneeb Ali
fuente
Dice "clave pública para blas-dev .." no instalada. :(
Olga Mu
@OlgaMu Use "yum --nogpgcheck install blas-devel"
Muneeb Ali
blas-staticY lapack-staticse requerían para mí en Fedora 20.
Placas
¡Gracias! Esto funcionó para mí en mi máquina AWS EC2 Amazon Linux.
Lil 'Bits
Sin embargo, esto no funciona para un entorno virtual, está fallando a menos que use sudo para la instalación de pip. ¿Algunas ideas?
user1610719
44

Supongo que estás hablando de instalación en Ubuntu. Solo usa:

apt-get install python-numpy python-scipy

Eso también debería ocuparse de la compilación de bibliotecas BLAS. De lo contrario, compilar las bibliotecas BLAS es muy difícil.

Vishwanath
fuente
12
@ V3ss0n, construir BLAS y LAPACK son notoriamente difíciles. Es mucho más fácil compilar e instalar núcleos desde cero que compilar esos dos malditos paquetes en mi humilde opinión.
Nicholas Mancuso
@Coder, descubrí cómo hacer esto en mi caja de Debian. Debería funcionar también para Ubuntu. mira esto: ydevel.tumblr.com/post/37462965735/… [RENUNCIA: Soy el autor de la publicación]
yati sagade
@NicholasMancuso De hecho, es difícil, pero logro construir Python completo (reubicable) + Lapack + ATLAS (mejor que BLAS) Scipy, Scikit, Maplotlib, NetworkX y muchas otras dependencias de C. Toda mi carpeta Runtime ahora tiene 900 MB (Python, Perl, Java incluido también) jaja. Pero eso hace que mis proyectos se reubiquen totalmente con su propio tiempo de ejecución en una carpeta. Hazme saber si lo necesitas. Mucho mejor que Virtualenv.
Phyo Arkar Lwin
@yatisagade, @Coder, de hecho, necesitas poder usarlo pip install scipyo construirlo desde la fuente en un entorno virtual.
Arthur
2

Seguir las instrucciones dadas por 'cfi' funciona para mí, aunque hay algunas piezas que dejaron fuera que pueda necesitar:

1) Su directorio lapack, después de descomprimir, puede llamarse lapack-XY (algún número de versión), por lo que puede cambiarle el nombre a LAPACK.

cd ~/src
mv lapack-[tab] LAPACK

2) En ese directorio, es posible que deba hacer:

cd ~/src/LAPACK 
cp lapack_LINUX.a libflapack.a
RickG
fuente
-3

Intenta usar

sudo apt-get install python3-scipy
李华强
fuente