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 라이브러리 BLAS 및 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

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로 옵션 OPTS및 NOOPT설정. 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.