Python SciPy a-t-il besoin de 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.

Quel tar dois-je télécharger sur ce site?

J'ai essayé les fortrans, mais j'obtiens toujours cette erreur (après avoir défini la variable d'environnement évidemment).

Joedborg
la source
La question est donc de savoir quelle est la bonne version que votre système peut télécharger à partir d'un site, mais ni les détails du système ni le site ne sont donnés dans la question? Il n'est pas surprenant qu'aucune réponse n'ait été donnée.
Michael

Réponses:

143

La page Web SciPy fournissait auparavant des instructions de construction et d'installation, mais les instructions qui s'y trouvent reposent désormais sur des distributions binaires du système d'exploitation. Pour construire SciPy (et NumPy) sur des systèmes d'exploitation sans packages précompilés des bibliothèques requises, vous devez construire puis créer un lien statique vers les bibliothèques Fortran BLAS et 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

Exécutez une seule des cinq commandes g77 / gfortran / ifort. J'ai tout commenté, sauf le gfortran que j'utilise. L'installation suivante de LAPACK nécessite un compilateur Fortran 90 , et comme les deux installations doivent utiliser le même compilateur Fortran, g77 ne doit pas être utilisé pour BLAS.

Ensuite, vous devrez installer les éléments LAPACK. Les instructions de la page Web SciPy m'ont également aidé ici, mais j'ai dû les modifier en fonction de mon environnement:

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

Mise à jour le 3-sept.-2015: Vérifié quelques commentaires aujourd'hui (merci à tous): Avant d'exécuter, make lapacklibéditez le make.incfichier et ajoutez des -fPICoptions OPTSet des NOOPTparamètres. Si vous êtes sur une architecture 64 bits ou souhaitez compiler pour une, ajoutez également -m64. Il est important que BLAS et LAPACK soient compilés avec ces options définies sur les mêmes valeurs. Si vous oubliez, le -fPICSciPy vous donnera en fait une erreur sur les symboles manquants et vous recommandera ce commutateur. La section spécifique de make.incressemble à ceci dans ma configuration:

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

Sur les anciennes machines (par exemple RedHat 5), gfortran peut être installé dans une version plus ancienne (par exemple 4.1.2) et ne comprend pas l'option -frecursive. Supprimez-le simplement du make.incfichier dans de tels cas.

La cible de test lapack du Makefile échoue dans ma configuration car elle ne trouve pas les bibliothèques blas. Si vous êtes minutieux, vous pouvez déplacer temporairement la bibliothèque blas vers l'emplacement spécifié pour tester le lapack. Je suis une personne paresseuse, donc je fais confiance aux développeurs pour que cela fonctionne et ne vérifie que dans SciPy.

cfi
la source
5
Cependant, il n'y a pas de libfblas dans blas.tgz.
joedborg
32
Cela a fonctionné pour moi, mais j'ai dû modifier le make.incfichier en définissant OPTS = -O2 -fPICet NOOPT = -O0 -fPIC.
gui11aume
8
@jdborg, il s'appelle apparemment juste liblapack.a maintenant
una_dinosauria
7
J'ai dû ajouter les options -m64 aux paramètres OPTS et NOOPT dans le fichier make.inc. Vous seul êtes bien sûr sur une machine 64 bits.
mjspier
21
+1 Merci beaucoup pour cela! Aussi, pour scipy, je devais faire export LAPACK=~/src/lapack-3.5.0/au lieu d'ajouter le libflapack.aà la fin.
Legend
328

Si vous devez utiliser les dernières versions de SciPy plutôt que la version packagée, sans avoir à vous soucier de la construction de BLAS et LAPACK, vous pouvez suivre la procédure ci-dessous.

Installer des bibliothèques d'algèbre linéaire à partir du référentiel (pour Ubuntu),

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

Ensuite, installez SciPy, (après avoir téléchargé la source SciPy): python setup.py installou

pip install scipy

Selon le cas.

AIB
la source
11
Cela a fonctionné pour moi, tks! Bien que j'ai dû changer libopenblas-devpour libblas-dev(Ubuntu 10.04).
alfetopito
1
a parfaitement fonctionné pour moi sous Mint 13 (fork précis) .Vous devez télécharger la source séparément, si vous utilisez easy_install -U #update
wbg
2
Cela a fonctionné parfaitement. Je n'ai rien eu à faire de différent dans mon cas (ubuntu 12.0.4)
MisterWalrus
1
sudo apt-get install python-devréparé. stackoverflow.com/a/21530768/125507
endolith
3
sudo yum install blas-devel lapack-develtravaillé pour moi
Roman
66

Sur Fedora, cela fonctionne:

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

N'oubliez pas d'installer ' lapack-devel ' et ' blas-devel ' en plus de 'blas' et 'lapack' sinon vous obtiendrez l'erreur que vous avez mentionnée ou l'erreur "numpy.distutils.system_info. LapackNotFoundError ".

Muneeb Ali
la source
Il dit "clé publique pour blas-dev .." non installé. :(
Olga Mu
@OlgaMu Use "yum --nogpgcheck install blas-devel"
Muneeb Ali
blas-static& lapack-staticétaient requis pour moi sur fedora 20.
hobs
Je vous remercie! Cela a fonctionné pour moi sur ma machine AWS EC2 Amazon Linux.
Lil 'Bits
Cela ne fonctionne pas pour un environnement virtuel, cela échoue à moins que j'utilise sudo pour l'installation de pip. Des idées?
user1610719
44

Je suppose que vous parlez d'installation dans Ubuntu. Utilisez simplement:

apt-get install python-numpy python-scipy

Cela devrait également prendre en charge la compilation des bibliothèques BLAS. Sinon, la compilation des bibliothèques BLAS est très difficile.

Vishwanath
la source
12
@ V3ss0n, construire BLAS et LAPACK est notoirement difficile. Il est beaucoup plus facile de compiler et d'installer des noyaux à partir de rien que de compiler ces deux fichus paquets à mon humble avis.
Nicholas Mancuso
@Coder, j'ai trouvé comment faire cela sur ma boîte Debian. Devrait également fonctionner pour Ubuntu. Vérifiez ceci: ydevel.tumblr.com/post/37462965735/… [AVERTISSEMENT: je suis l'auteur du message]
yati sagade
@NicholasMancuso C'est en effet difficile mais j'arrive à construire tout python (Relocatable) + Lapack + ATLAS (Better than BLAS) Scipy, Scikit, Maplotlib, NetworkX et beaucoup d'autres dépendances C. Mon dossier Runtime entier maintenant 900 Mo (Python, Perl, Java inclus aussi) haha ​​,. Mais cela rend mes projets totalement déplacés avec son propre runtime dans un dossier. Faites-moi savoir si vous en avez besoin. Bien mieux que Virtualenv.
Phyo Arkar Lwin
@yatisagade, @Coder, en effet, vous devez pouvoir l'utiliser pip install scipyou le construire à partir des sources dans un environnement virtuel.
Arthur
2

Suivre les instructions données par 'cfi' fonctionne pour moi, bien qu'il y ait quelques pièces dont vous pourriez avoir besoin:

1) Votre répertoire lapack, après décompression, peut s'appeler lapack-XY (un certain numéro de version), vous pouvez donc simplement le renommer en LAPACK.

cd ~/src
mv lapack-[tab] LAPACK

2) Dans ce répertoire, vous devrez peut-être faire:

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

Essayez d'utiliser

sudo apt-get install python3-scipy
李华强
la source