web-dev-qa-db-fra.com

Est-ce que Python SciPy a besoin de BLAS?

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.

De quel fichier ai-je besoin pour télécharger ce site?

J'ai essayé le fortrans, mais je continue à avoir cette erreur (après avoir défini la variable d'environnement évidemment).

172
jdborg

La page Web SciPy utilisée pour fournir des instructions de construction et d'installation, mais celles-ci reposent maintenant sur des distributions binaires du système d'exploitation. Pour compiler SciPy (et NumPy) sur des systèmes d'exploitation sans les packages précompilés des bibliothèques requises, vous devez créer un lien statique avec 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

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

Ensuite, vous devrez installer le logiciel LAPACK. Les instructions de la page Web SciPy m'ont également aidé ici, mais je devais les modifier pour les adapter à 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-Sep-2015: Vérifié quelques commentaires aujourd'hui (merci à tous): Avant d'exécuter make lapacklib éditez le fichier make.inc et ajoutez l'option -fPIC à OPTS et NOOPT réglages. Si vous utilisez une architecture 64 bits ou souhaitez en compiler 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 -fPIC, SciPy vous signalera une erreur concernant les symboles manquants et vous recommandera ce commutateur. La section spécifique de make.inc ressemble à ceci dans ma configuration:

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

Sur les anciennes machines (RedHat 5, par exemple), gfortran peut être installé dans une version antérieure (4.1.2, par exemple) et ne comprend pas l’option -frecursive. Supprimez-le simplement du fichier make.inc dans ce cas.

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

141
cfi

Si vous devez utiliser les dernières versions de SciPy plutôt que la version fournie, sans passer par les tracas de la construction de BLAS et de 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

Puis installez SciPy (après avoir téléchargé la source SciPy): python setup.py install ou

pip install scipy

Selon le cas.

327
AIB

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 le " numpy.distutils.system_info .LapackNotFoundError "erreur.

66
Muneeb Ali

Je suppose que vous parlez d’installation dans Ubuntu. Il suffit d'utiliser:

apt-get install python-numpy python-scipy

Cela devrait également s’occuper de la compilation des bibliothèques BLAS. Sinon, la compilation des bibliothèques BLAS est très difficile.

44
Vishwanath

Pour les utilisateurs Windows, il existe un package binaire Nice de Chris (attention: 191 Mo de téléchargement):

12
jmunsch

Suivre les instructions données par 'cfi' fonctionne pour moi, bien que vous ayez besoin de quelques morceaux:

1) Votre répertoire lapack, après avoir décompressé, peut être appelé lapack-X-Y (un numéro de version), vous pouvez donc simplement le renommer 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
2
RickG