导入scipy出错:无法导入名称'_ccallback_c'。

5

我使用 Anaconda3@windows 导入 scipy(v1.0.0) 时编译出现错误。我在网上查找了其他类似的情况,但没有找到解决办法,请问有人有什么建议吗?

import numpy as np
import scipy

错误提示信息

ImportError
Traceback (most recent call
last) <ipython-input-12-eb63b9337447> in <module>()
      1 import numpy as np
----> 2 import scipy

~\AppData\Roaming\Python\Python36\site-packages\scipy\__init__.py in
<module>()
    116     del _NumpyVersion
    117 
--> 118     from scipy._lib._ccallback import LowLevelCallable
    119 
    120     from scipy._lib._testutils import PytestTester

~\AppData\Roaming\Python\Python36\site-packages\scipy\_lib\_ccallback.py
in <module>()
----> 1 from . import _ccallback_c
      2 
      3 import ctypes
      4 
      5 PyCFuncPtr = ctypes.CFUNCTYPE(ctypes.c_void_p).__bases__[0]

ImportError: cannot import name '_ccallback_c'
4个回答

7
我也遇到了同样的问题并尝试了所有推荐的解决方案(以各种方式重新安装),但没有任何作用。 帮助我解决问题的是仔细阅读文档(https://www.scipy.org/install.html)。 在我的情况下,scipy库还需要安装其他一些最新版本的库,所以我运行了以下命令: python -m pip install numpy scipy matplotlib ipython jupyter pandas sympy nose 现在一切都正常了。

1
在我的情况下,似乎我没有所有必要的并且与scipy相关的软件包,例如ipython、jupyter、sympy和nose。因此,我在scipy安装文档中找到了这个解决方案,基本上是所需库的列表。 - Daria Simonova

3
解决方案已找到!
  1. 在我的电脑中,删除scipy(整个文件夹),路径为C:\Users(你的用户名)\AppData\Roaming\Python\Python36\site-packages\scipy*
  2. https://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy下载scipy
  3. 通过pip install scipy-1.0.0-cp36-cp36m-win_amd64.whl重新安装(我的操作系统是windows-64位)
就这样!

1
如果您使用Anaconda,建议尝试运行以下命令:conda update numpy scipy matplotlib ipython jupyter pandas sympy nose,以更新相关的编程库。

0

深入挖掘后,首先需要全面了解这一点:SciPy依赖于已经安装的NumPy。SciPy轮的setup.py文件使用NumPy功能来配置和安装轮。

SciPy setup.py

...

if __name__ == '__main__':
    from numpy.distutils.core import setup
    setup(**configuration(top_path='').todict())

其次,当你尝试使用这个库时,可能会遇到错误。经过检查库文件,你会发现这是因为二进制包的命名规则是基于二进制包支持的系统架构来命名共享对象文件的。在 /_lib/_ccallback.py 文件中按文件名导入共享对象时,找不到文件,因此会引发这个错误(/_lib/_ccallback.py 中的第1行),因为它的名称不是_ccallback_c.so 而是 _ccallback_c.cpython-36m-x86_64-linux-gnu.so 或其他系统架构变化的名称。
from . import _ccallback_c

这些文件名可能是由于尚未运行NumPy设置过程或与Cython相关的某些问题而产生的。但最简单的解决方法是将.whl扩展名更改为.zip,并将所有相关的.so文件重命名为不包含架构片段的名称。然后将.zip更改为.whl,就可以使用了。


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