模块“numpy.distutils.__config__”没有属性“blas_opt_info”

Tur*_*ise 13 python numpy theano deep-learning tensorflow

我正在尝试研究神经网络和深度学习(http://neuralnetworksanddeeplearning.com/chap1.html)。使用 MichalDanielDobrzanski 的 Python 3 更新版本 ( https://github.com/MichalDanielDobrzanski/DeepLearningPython )。尝试在我的命令控制台中运行它,但出现以下错误。我尝试卸载并重新安装 setuptools、theano 和 numpy,但到目前为止都没有成功。非常感谢任何帮助!

这是完整的错误日志:

WARNING (theano.configdefaults): g++ not available, if using conda: `conda install m2w64-toolchain`
C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\configdefaults.py:560: UserWarning: DeprecationWarning: there is no c++ compiler.This is deprecated and with Theano 0.11 a c++ compiler will be mandatory
  warnings.warn("DeprecationWarning: there is no c++ compiler."
WARNING (theano.configdefaults): g++ not detected ! Theano will be unable to execute optimized C-implementations (for both CPU and GPU) and will default to Python implementations. Performance will be severely degraded. To remove this warning, set Theano flags cxx to an empty string.
Traceback (most recent call last):
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\configparser.py", line 168, in fetch_val_for_key
    return theano_cfg.get(section, option)
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\configparser.py", line 781, in get
    d = self._unify_values(section, vars)
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\configparser.py", line 1149, in _unify_values
    raise NoSectionError(section) from None
configparser.NoSectionError: No section: 'blas'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\configparser.py", line 327, in __get__
    val_str = fetch_val_for_key(self.fullname,
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\configparser.py", line 172, in fetch_val_for_key
    raise KeyError(key)
KeyError: 'blas.ldflags'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\ASUS\Documents\GitHub\Neural-network-and-deep-learning-but-for-python-3\test.py", line 156, in <module>
    import network3
  File "C:\Users\ASUS\Documents\GitHub\Neural-network-and-deep-learning-but-for-python-3\network3.py", line 37, in <module>
    import theano
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\__init__.py", line 124, in <module>
    from theano.scan_module import (scan, map, reduce, foldl, foldr, clone,
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\scan_module\__init__.py", line 41, in <module>
    from theano.scan_module import scan_opt
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\scan_module\scan_opt.py", line 60, in <module>
    from theano import tensor, scalar
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\tensor\__init__.py", line 17, in <module>
    from theano.tensor import blas
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\tensor\blas.py", line 155, in <module>
    from theano.tensor.blas_headers import blas_header_text
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\tensor\blas_headers.py", line 987, in <module>
    if not config.blas.ldflags:
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\configparser.py", line 332, in __get__
    val_str = self.default()
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python39\lib\site-packages\theano\configdefaults.py", line 1284, in default_blas_ldflags
    blas_info = np.distutils.__config__.blas_opt_info
AttributeError: module 'numpy.distutils.__config__' has no attribute 'blas_opt_info'
Run Code Online (Sandbox Code Playgroud)

Mar*_*oni 18

我遇到了同样的问题,并通过将 numpy 降级到版本 1.20.3 解决了它:

pip3 install --upgrade numpy==1.20.3
Run Code Online (Sandbox Code Playgroud)

  • 注意:1.21 也可以。 (2认同)

Cec*_*rry 7

猴子补丁 NumPy。

\n
import numpy as np\n\ntry:\n    np.distutils.__config__.blas_opt_info = np.distutils.__config__.blas_ilp64_opt_info\nexcept Exception:\n    pass\n
Run Code Online (Sandbox Code Playgroud)\n

这个工作片段直接来自NumPy 维护者 Ralf Gommers (@rgommers),他首先针对合成子模块定义了一个类似的猴子补丁numpy.__config__问题提交者 Alex Rogozhnikov (@arogozhnikov)随后通过对首选子模块进行猴子修补来numpy.distutils.__config__改进这一点。

\n

对于积极维护的软件(......所以,这不是theano我所说的),而是:

\n
    \n
  • 需要 NumPy \xe2\x89\xa5 1.22.0。
  • \n
  • 将所有损坏的引用全局替换为np.distutils.__config__.blas_opt_info对\n 的工作引用np.distutils.__config__.blas_ilp64_opt_info
  • \n
\n

危险,威尔·罗宾逊!危险!

\n

然而,上述所有内容都带有一个重要的警告:在未来某个尚未决定的 NumPy 版本中,所有这一切都将再次被打破。为什么?再次引用NumPy 维护者 Ralf Gommers (@rgommers) 的 话:

\n
\n

当我们更改构建系统时,这一切都会改变,我们不会保留system_info类型输出。

\n
\n

</gulp>

\n


Jon*_*hoi 5

附加信息:

theano是一个过时的包,不应与现代版本的 numpy 一起使用。然而,一些遗留代码库将使用theano,因此将需要降级 numpy < 1.22 的解决方法,如已接受的答案中所示。numpy 1.22 中已弃用:请参阅 numpy issues #21079

如果需要坚持使用 numpy 1.22+,blas_opt_info则位于 中numpy.distutils.system_info.blas_opt_info,因此手动修补 theano 以使用正确的符号将是另一种解决方法。

  • **猴子修补 `theano` 是*绝对*的方法。** 在大多数情况下,降级 NumPy 既不可行也不可取 - 尤其是在未来,Python 生态系统中的其他所有内容都将越来越需要现代 NumPy API。 (3认同)