安装BLAS和LAPACK以便使用scipy,最简单的方法是什么?

63
我想运行别人准备好的程序,其中包含scipy。我尝试使用以下方式安装scipy:
```pip install scipy```
但是出现了错误消息:"找不到scipy"。请问我该如何解决这个问题?
pip install scipy

但是它给了我很长的错误信息。我知道有使用Anaconda和Canopy的方法,但我认为这些方法很麻烦。我希望能有一种简单的方法。我也尝试过

G:\determinator_Oskar>pip install scipy
Collecting scipy
  Using cached scipy-0.16.1.tar.gz
Building wheels for collected packages: scipy
  Running setup.py bdist_wheel for scipy
  Complete output from command g:\myve\scripts\python.exe -c "import setuptools;
__file__='e:\\temp_n~1\\pip-build-1xigxu\\scipy\\setup.py';exec(compile(open(__f
ile__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d e:\temp_
n~1\tmp07__zrpip-wheel-:
  lapack_opt_info:
  openblas_lapack_info:
    libraries openblas not found in ['g:\\myve\\lib', 'C:\\']
    NOT AVAILABLE

  lapack_mkl_info:
  mkl_info:
    libraries mkl,vml,guide not found in ['g:\\myve\\lib', 'C:\\']
    NOT AVAILABLE

    NOT AVAILABLE

  atlas_3_10_threads_info:
  Setting PTATLAS=ATLAS
    libraries tatlas,tatlas not found in g:\myve\lib
    libraries lapack_atlas not found in g:\myve\lib
    libraries tatlas,tatlas not found in C:\
    libraries lapack_atlas not found in C:\
  <class 'numpy.distutils.system_info.atlas_3_10_threads_info'>
    NOT AVAILABLE

  atlas_3_10_info:
    libraries satlas,satlas not found in g:\myve\lib
    libraries lapack_atlas not found in g:\myve\lib
    libraries satlas,satlas not found in C:\
    libraries lapack_atlas not found in C:\
  <class 'numpy.distutils.system_info.atlas_3_10_info'>
    NOT AVAILABLE

  atlas_threads_info:
  Setting PTATLAS=ATLAS
    libraries ptf77blas,ptcblas,atlas not found in g:\myve\lib
    libraries lapack_atlas not found in g:\myve\lib
    libraries ptf77blas,ptcblas,atlas not found in C:\
    libraries lapack_atlas not found in C:\
  <class 'numpy.distutils.system_info.atlas_threads_info'>
    NOT AVAILABLE

  atlas_info:
    libraries f77blas,cblas,atlas not found in g:\myve\lib
    libraries lapack_atlas not found in g:\myve\lib
    libraries f77blas,cblas,atlas not found in C:\
    libraries lapack_atlas not found in C:\
  <class 'numpy.distutils.system_info.atlas_info'>
    NOT AVAILABLE

  lapack_info:
    libraries lapack not found in ['g:\\myve\\lib', 'C:\\']
    NOT AVAILABLE

  lapack_src_info:
    NOT AVAILABLE

    NOT AVAILABLE

  g:\myve\lib\site-packages\numpy\distutils\system_info.py:1552: UserWarning:
      Atlas (http://math-atlas.sourceforge.net/) libraries not found.
      Directories to search for the libraries can be specified in the
      numpy/distutils/site.cfg file (section [atlas]) or by setting
      the ATLAS environment variable.
    warnings.warn(AtlasNotFoundError.__doc__)
  g:\myve\lib\site-packages\numpy\distutils\system_info.py:1563: UserWarning:
      Lapack (http://www.netlib.org/lapack/) libraries not found.
      Directories to search for the libraries can be specified in the
      numpy/distutils/site.cfg file (section [lapack]) or by setting
      the LAPACK environment variable.
    warnings.warn(LapackNotFoundError.__doc__)
  g:\myve\lib\site-packages\numpy\distutils\system_info.py:1566: UserWarning:
      Lapack (http://www.netlib.org/lapack/) sources not found.
      Directories to search for the sources can be specified in the
      numpy/distutils/site.cfg file (section [lapack_src]) or by setting
      the LAPACK_SRC environment variable.
    warnings.warn(LapackSrcNotFoundError.__doc__)
  Running from scipy source directory.
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "e:\temp_n~1\pip-build-1xigxu\scipy\setup.py", line 253, in <module>
      setup_package()
    File "e:\temp_n~1\pip-build-1xigxu\scipy\setup.py", line 250, in setup_packa
ge
      setup(**metadata)
    File "g:\myve\lib\site-packages\numpy\distutils\core.py", line 135, in setup

      config = configuration()
    File "e:\temp_n~1\pip-build-1xigxu\scipy\setup.py", line 175, in configurati
on
      config.add_subpackage('scipy')
    File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 1001, in
 add_subpackage
      caller_level = 2)
    File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 970, in
get_subpackage
      caller_level = caller_level + 1)
    File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 907, in
_get_configuration_from_setup_py
      config = setup_module.configuration(*args)
    File "scipy\setup.py", line 15, in configuration
      config.add_subpackage('linalg')
    File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 1001, in
 add_subpackage
      caller_level = 2)
    File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 970, in
get_subpackage
      caller_level = caller_level + 1)
    File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 907, in
_get_configuration_from_setup_py
      config = setup_module.configuration(*args)
    File "scipy\linalg\setup.py", line 20, in configuration
      raise NotFoundError('no lapack/blas resources found')
  numpy.distutils.system_info.NotFoundError: no lapack/blas resources found

  ----------------------------------------
  Failed building wheel for scipy
Failed to build scipy
Installing collected packages: scipy
  Running setup.py install for scipy
    Complete output from command g:\myve\scripts\python.exe -c "import setuptool
s, tokenize;__file__='e:\\temp_n~1\\pip-build-1xigxu\\scipy\\setup.py';exec(comp
ile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __fi
le__, 'exec'))" install --record e:\temp_n~1\pip-3hncqr-record\install-record.tx
t --single-version-externally-managed --compile --install-headers g:\myve\includ
e\site\python2.7\scipy:
    lapack_opt_info:
    openblas_lapack_info:
      libraries openblas not found in ['g:\\myve\\lib', 'C:\\']
      NOT AVAILABLE

    lapack_mkl_info:
    mkl_info:
      libraries mkl,vml,guide not found in ['g:\\myve\\lib', 'C:\\']
      NOT AVAILABLE

      NOT AVAILABLE

    atlas_3_10_threads_info:
    Setting PTATLAS=ATLAS
      libraries tatlas,tatlas not found in g:\myve\lib
      libraries lapack_atlas not found in g:\myve\lib
      libraries tatlas,tatlas not found in C:\
      libraries lapack_atlas not found in C:\
    <class 'numpy.distutils.system_info.atlas_3_10_threads_info'>
      NOT AVAILABLE

    atlas_3_10_info:
      libraries satlas,satlas not found in g:\myve\lib
      libraries lapack_atlas not found in g:\myve\lib
      libraries satlas,satlas not found in C:\
      libraries lapack_atlas not found in C:\
    <class 'numpy.distutils.system_info.atlas_3_10_info'>
      NOT AVAILABLE

    atlas_threads_info:
    Setting PTATLAS=ATLAS
      libraries ptf77blas,ptcblas,atlas not found in g:\myve\lib
      libraries lapack_atlas not found in g:\myve\lib
      libraries ptf77blas,ptcblas,atlas not found in C:\
      libraries lapack_atlas not found in C:\
    <class 'numpy.distutils.system_info.atlas_threads_info'>
      NOT AVAILABLE

    atlas_info:
      libraries f77blas,cblas,atlas not found in g:\myve\lib
      libraries lapack_atlas not found in g:\myve\lib
      libraries f77blas,cblas,atlas not found in C:\
      libraries lapack_atlas not found in C:\
    <class 'numpy.distutils.system_info.atlas_info'>
      NOT AVAILABLE

    lapack_info:
      libraries lapack not found in ['g:\\myve\\lib', 'C:\\']
      NOT AVAILABLE

    lapack_src_info:
      NOT AVAILABLE

      NOT AVAILABLE

    g:\myve\lib\site-packages\numpy\distutils\system_info.py:1552: UserWarning:
        Atlas (http://math-atlas.sourceforge.net/) libraries not found.
        Directories to search for the libraries can be specified in the
        numpy/distutils/site.cfg file (section [atlas]) or by setting
        the ATLAS environment variable.
      warnings.warn(AtlasNotFoundError.__doc__)
    g:\myve\lib\site-packages\numpy\distutils\system_info.py:1563: UserWarning:
        Lapack (http://www.netlib.org/lapack/) libraries not found.
        Directories to search for the libraries can be specified in the
        numpy/distutils/site.cfg file (section [lapack]) or by setting
        the LAPACK environment variable.
      warnings.warn(LapackNotFoundError.__doc__)
    g:\myve\lib\site-packages\numpy\distutils\system_info.py:1566: UserWarning:
        Lapack (http://www.netlib.org/lapack/) sources not found.
        Directories to search for the sources can be specified in the
        numpy/distutils/site.cfg file (section [lapack_src]) or by setting
        the LAPACK_SRC environment variable.
      warnings.warn(LapackSrcNotFoundError.__doc__)
    Running from scipy source directory.
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "e:\temp_n~1\pip-build-1xigxu\scipy\setup.py", line 253, in <module>
        setup_package()
      File "e:\temp_n~1\pip-build-1xigxu\scipy\setup.py", line 250, in setup_pac
kage
        setup(**metadata)
      File "g:\myve\lib\site-packages\numpy\distutils\core.py", line 135, in set
up
        config = configuration()
      File "e:\temp_n~1\pip-build-1xigxu\scipy\setup.py", line 175, in configura
tion
        config.add_subpackage('scipy')
      File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 1001,
in add_subpackage
        caller_level = 2)
      File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 970, i
n get_subpackage
        caller_level = caller_level + 1)
      File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 907, i
n _get_configuration_from_setup_py
        config = setup_module.configuration(*args)
      File "scipy\setup.py", line 15, in configuration
        config.add_subpackage('linalg')
      File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 1001,
in add_subpackage
        caller_level = 2)
      File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 970, i
n get_subpackage
        caller_level = caller_level + 1)
      File "g:\myve\lib\site-packages\numpy\distutils\misc_util.py", line 907, i
n _get_configuration_from_setup_py
        config = setup_module.configuration(*args)
      File "scipy\linalg\setup.py", line 20, in configuration
        raise NotFoundError('no lapack/blas resources found')
    numpy.distutils.system_info.NotFoundError: no lapack/blas resources found

    ----------------------------------------
Command "g:\myve\scripts\python.exe -c "import setuptools, tokenize;__file__='e:
\\temp_n~1\\pip-build-1xigxu\\scipy\\setup.py';exec(compile(getattr(tokenize, 'o
pen', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install
--record e:\temp_n~1\pip-3hncqr-record\install-record.txt --single-version-exter
nally-managed --compile --install-headers g:\myve\include\site\python2.7\scipy"
failed with error code 1 in e:\temp_n~1\pip-build-1xigxu\scipy      

我也尝试过

pip install lapack

有了这个结果

Collecting lapack
  Could not find a version that satisfies the requirement lapack (from versions
 )
No matching distribution found for lapack

我也尝试过。
pip install blas

具有类似的结果

G:\determinator_Oskar>pip install blas
Collecting blas
  Could not find a version that satisfies the requirement blas (from versions: )

No matching distribution found for blas

为什么Scipy变得如此复杂?


1
我执行了 yum install lapack 命令安装了 LAPACK 和 BLAS,但问题仍未解决... - Paul
11
在RedHat或CentOS上需要执行sudo yum install blas-devel lapack-devel。在Debian或Ubuntu上,则需要执行sudo apt-get install gfortran libopenblas-dev liblapack-dev python-dev。请注意,这些命令可能因版本和环境而异。 - gaoithe
如果我在一个新的EC2 Redhat镜像上使用那个redhat命令,我会收到一个错误消息,因为这些软件包不可用。(即软件包名称错误) - falsePockets
@falsePockets 尝试安装 libblas-devel 和 liblapack-devel,参考 https://stackoverflow.com/questions/15777836/how-to-install-scipy-on-ec2-server - gaoithe
我曾经遇到同样的问题,升级pip帮助了我。 - Shah Muzaffar
显示剩余2条评论
11个回答

61

对于Debian Jessie和Stretch,安装以下软件包可以解决问题:

sudo apt install libblas3 liblapack3 liblapack-dev libblas-dev

жӮЁдёӢдёҖдёӘй—®йўҳеҫҲеҸҜиғҪжҳҜзјәе°‘Fortranзј–иҜ‘еҷЁпјҢеҸҜд»ҘйҖҡиҝҮд»ҘдёӢж–№ејҸе®үиЈ…жқҘи§ЈеҶіпјҡ

sudo apt install gfortran

如果您想要优化的scipy,您还可以安装可选的libatlas-base-dev软件包:

sudo apt install libatlas-base-dev

来源


如果您遇到此类缺少Python.h文件的问题,例如:

Python.h: No such file or directory

请查看此帖子:https://dev59.com/ZmEi5IYBdhLWcg3wMZ3a#21530768


1
我必须在“最小化的Ubuntu 18.04.3 LTS”上按照这些步骤进行。 - Kishor Pawar
1
这样你会得到一个未经优化的BLAS库。请查看我的回答(源自scipy文档本身)。 - Marco Sulla

35

8
大家好,感谢miniconda和上帝(感谢上帝的恩典)。它真的像奇迹一样有效。按照@jakedvp建议的方式安装并运行conda install scipy。现在我的程序正在运行,我很开心。祝大家有愉快的一天 :) - Marko
我使用的是Windows 10,但无法使用Wheels进行安装。我该怎么办? - jayz
你尝试过其他解决方案吗?如果仍然不起作用,您可以提出一个新问题,解释您尝试了什么以及遇到了什么错误。 - agold
这对我有用。我下载了*.whl文件并将其复制到安装pip的目录中,然后运行命令"pip install filename.whl"。 - Amir Md Amiruzzaman
numpy 发出了 BLAS 和 LAPACK 的警告。使用 numpy 轮子并不能解决问题,因为它不包含优化库。此外,scipy 已经要求使用 numpy,所以... - Marco Sulla
1
页面上没有blas/lapack安装的任何信息,而且该程序包也不包含您可能需要的所有版本。 - Adam Bajger

30
“为什么scipy变得如此复杂?”
它变得如此复杂是因为Python的包管理系统是建立在跟踪Python包依赖关系的基础上的,而SciPy和其他科学工具有超出Python的依赖关系。Wheels解决了部分问题,但我的经验是像pip/virtualenv这样的工具并不足以安装和管理科学Python栈。
如果您想要一个简单的方法来使用SciPy,我强烈推荐Anaconda distribution。它将为您提供Python科学计算所需的一切。
如果您想要一个“简短”的方式来做这件事(我理解为“我不想安装一个庞大的发行版”),您可以尝试miniconda,然后运行conda install scipy

6

对于Ubuntu/Debian操作系统,可以使用chjortlund的回答,虽然这种方法非常好,但并不完美,因为这样会获得未经优化的BLAS库。你只需要执行以下操作:

sudo apt install libatlas-base-dev

完成了,大功告成!

源代码


你可能还需要安装Fortran编译器:apt install gfortran - jstm
@jstm 这已经在 chjortlund 的回答中解释过了。 - Marco Sulla

4
使用conda安装scipy而非pip解决了我的问题!

2

0

为了完整性,虽然这可能不适用于您的特定设置(外部程序+Windows),但人们也可以轻松地通过(大型)SageMath下载获取Scipy。


0

我在freeBSD上遇到了这个问题。 看起来缺少lapack包,我通过以下方式安装它们(以root身份):

pkg install lapack
pkg install atlas-devel  #not sure this is needed, but just in case

我想它也可以在其他系统上运行,使用适当的软件包安装程序(例如apt-get)


0
conda install liblapack

这对我有用


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接