Python SciPy에 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.

이 사이트에서 어떤 타르를 다운로드해야합니까?

fortrans를 시도했지만 환경 변수를 분명히 설정 한 후이 오류가 계속 발생합니다.


문제는 어떤 사이트에서 시스템을 다운로드 할 수있는 올바른 버전이지만 질문에 시스템 세부 정보 나 사이트가 제공되지 않습니다. 다가오는 답변이 없다는 것은 놀라운 일이 아닙니다.
Michael J. Barber

답변:


143

SciPy는 웹 페이지 구축 및 설치 지침을 제공하는 데 사용하지만,이 지침은 이제 OS 바이너리 배포판에 의존하고 있습니다. 필수 라이브러리의 사전 컴파일 된 패키지없이 운영 체제에서 SciPy (및 NumPy)를 빌드하려면 Fortran 라이브러리 BLASLAPACK 을 빌드 한 후 정적으로 링크해야합니다 .

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

5 개의 g77 / gfortran / ifort 명령 중 하나만 실행하십시오. 나는 모든 것을 언급했지만 내가 사용하는 gfortran. 후속 LAPACK 설치에는 Fortran 90 컴파일러 가 필요하며 두 설치 모두 동일한 Fortran 컴파일러를 사용해야하므로 g77을 BLAS에 사용해서는 안됩니다.

다음으로 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

검증 어떤 코멘트 오늘 (모두에게 감사) : 업데이트 3 - 9 월 2015 실행하기 전에 make lapacklib편집에게 make.inc파일을 추가 -fPIC로 옵션 OPTSNOOPT설정. 64 비트 아키텍처를 사용하거나 컴파일하려는 경우을 추가하십시오 -m64. BLAS 및 LAPACK은 이러한 옵션을 동일한 값으로 설정하여 컴파일해야합니다. -fPICSciPy 를 잊어 버린 경우 실제로 누락 된 심볼에 대한 오류를 표시하고이 스위치를 권장합니다. 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이러한 경우 파일에서 간단히 제거하십시오 .

Makefile의 lapack 테스트 대상이 blas 라이브러리를 찾을 수 없기 때문에 설정에서 실패합니다. 철저한 경우 blas 라이브러리를 지정된 위치로 일시적으로 이동하여 lapack을 테스트 할 수 있습니다. 나는 게으른 사람이므로 개발자가 SciPy에서만 작동하고 확인하도록 믿습니다.


5
blas.tgz에는 libfblas가 없습니다.
joedborg

32
나를 위해 일했지만, 및 make.inc을 설정 하여 파일 을 편집해야했습니다 . OPTS = -O2 -fPICNOOPT = -O0 -fPIC
gui11aume

8
@jdborg 그것은 분명히 liblapack.a라고 불렀습니다
una_dinosauria

7
make.inc 파일의 OPTS 및 NOOPT 설정에 -m64 옵션을 추가해야했습니다. 물론 당신은 64 비트 머신을 사용하고 있습니다.
mjspier

21
+1 많은 감사합니다! 또한 scipy의 경우 끝에 in export LAPACK=~/src/lapack-3.5.0/을 추가하는 대신 해야 했습니다 libflapack.a.
Legend

328

BLAS 및 LAPACK을 작성하는 번거 로움없이 패키지 버전이 아닌 최신 버전의 SciPy를 사용해야하는 경우 아래 절차를 수행 할 수 있습니다.

저장소 (우분투 용)에서 선형 대수 라이브러리를 설치하십시오.

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

그런 다음 SciPy 소스를 다운로드 한 후 SciPy를 설치하십시오. python setup.py install또는

pip install scipy

경우에 따라


11
이것은 나를 위해 일했다, tks! (Ubuntu 10.04) 로 변경 libopenblas-dev해야 했지만 libblas-dev.
alfetopito 2016 년

1
easy_install -U #update
wbg

2
완벽하게 작동했습니다. 내 경우에는 다른 것을 할 필요가 없었습니다 (우분투 12.0.4)
MisterWalrus

1
sudo apt-get install python-dev고쳤다. stackoverflow.com/a/21530768/125507
endolith 2016 년

3
sudo yum install blas-devel lapack-devel나를 위해 일했다
로마

66

Fedora에서는 다음과 같이 작동합니다.

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

'blas'및 'lapack'외에 ' lapack-devel '및 ' blas-devel ' 을 설치해야합니다. 그렇지 않으면 언급 한 오류 또는 "numpy.distutils.system_info. LapackNotFoundError "오류가 발생합니다.


"공개 키 blas-dev .."가 설치되어 있지 않습니다. :(
Olga Mu

@OlgaMu "yum --nogpgcheck install blas-devel"사용
Muneeb Ali

blas-static& lapack-staticfedora 20에서 나를 위해 필요했습니다.
호브

감사합니다! 이것은 AWS EC2 Amazon Linux 시스템에서 효과적이었습니다.
Lil 'Bits

이것은 가상 환경에서는 작동하지 않지만 pip 설치에 sudo를 사용하지 않으면 실패합니다. 어떤 아이디어?
user1610719

44

우분투에서의 설치에 대해 이야기하고 있다고 생각합니다. 그냥 사용하십시오 :

apt-get install python-numpy python-scipy

BLAS 라이브러리 컴파일도 처리해야합니다. 그렇지 않으면 BLAS 라이브러리를 컴파일하는 것은 매우 어렵습니다.


12
@ V3ss0n, BLAS 및 LAPACK 구축은 매우 어렵습니다. imho 두 패키지를 컴파일하는 것보다 처음부터 커널을 컴파일하고 설치하는 것이 훨씬 쉽습니다.
Nicholas Mancuso

@ Coder, 데비안 상자 에서이 작업을 수행하는 방법을 알아 냈습니다. 우분투에서도 작동합니다. 이것을 확인하십시오 : ydevel.tumblr.com/post/37462965735/… [면책 조항 : 나는 포스트의 저자입니다]
yati sagade

@NicholasMancuso 실제로는 어렵지만 전체 파이썬 (Relocatable) + Lapack + ATLAS (BLAS보다 낫다) Scipy, Scikit, Maplotlib, NetworkX 및 기타 C 종속성을 많이 만들 수 있습니다. 내 전체 런타임 폴더는 이제 900MB (Python, Perl, Java도 포함) haha입니다. 그러나 그것은 내 프로젝트를 하나의 폴더에 자체 런타임으로 완전히 재배치시킵니다. 필요한 경우 알려주십시오. Virtualenv보다 훨씬 좋습니다.
Phyo Arkar Lwin

@yatisagade, @Coder, 실제로 pip install scipy가상 환경의 소스에서 사용 하거나 빌드 할 수 있어야 합니다.
Arthur


2

'cfi'가 제공 한 지침을 따르면 나를 위해 작동하지만 필요한 몇 가지 부분이 있지만

1) 압축을 푼 후에 lapack 디렉토리를 lapack-XY (일부 버전 번호)라고 할 수 있으므로 LAPACK으로 이름을 바꿀 수 있습니다.

cd ~/src
mv lapack-[tab] LAPACK

2) 해당 디렉토리에서 다음을 수행해야 할 수도 있습니다.

cd ~/src/LAPACK 
cp lapack_LINUX.a libflapack.a

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.