由于缺少 ._ufuncs dll,Python scipy 模块导入错误

2024-03-28

我在 python 中从 scipy 集成子模块时遇到了一些麻烦。 我有一个 64 位架构,并且根据 python 解释器的第一行(见下文),我似乎还在将 64 位版本的 Python 与 Anaconda 一起使用。

下面是问题(我只是编写了最少的代码来显示发生的情况)


Python 3.4.3 |Anaconda 2.3.0 (64-bit)| (default, Mar  6 2015, 12:06:10) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>> import scipy.integrate
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\*********\Anaconda3\lib\site-packages\scipy\integrate\__init__.py", line 55, in <module>
    from .quadrature import *
  File "C:\Users\*********\Anaconda3\lib\site-packages\scipy\integrate\quadrature.py", line 10, in <module>
    from scipy.special.orthogonal import p_roots
  File "C:\Users\*********\Anaconda3\lib\site-packages\scipy\special\__init__.py", line 636, in <module>
    from ._ufuncs import *
ImportError: DLL load failed: Le module spécifié est introuvable.

import scipy.special 也会发生同样的情况

如您所见,可以导入 scipy,但是 scipy.integrate 会生成错误。奇怪的是在文件夹中 ...\lib\site-packages\scipy\special,出现 ._ufuncs.pyd。 另外,我经常将 scipty 用于其他目的,并且一切正常。

我使用的是 scipy 0.18.0 版本和 pip 1.8.1。 我尝试用 conda 重新安装 scipy 但这似乎没有改变任何东西。

貌似找不到dll。我在互联网上发现了一些有类似问题的帖子(包括建议在 C:\Windows\SysWOW64 中下载“libmmd.dll”的帖子),但似乎都不起作用。我的猜测是,这仍然是 32-64 位兼容性的 pb,因为这是 python 中最常见的 pb,我记得几个月前第一次设置所有内容时有巨大的 pb。

那么,继最初的问题之后,有没有办法知道每个包或 dll 的哪个版本(32 位或 64 位)已有效安装/加载? 您知道为什么我收到此错误消息吗?

谢谢各位的解答,这个问题真是让人郁闷啊……


如果你使用 conda 并且不想安装 MKL 并复制上面提到的 DLL,我发现你可以通过重新安装 icc_rt 包来解决这个问题:

conda remove icc_rt --force
conda install icc_rt --no-deps

The icc_rt包具有所需的 DLL(LIBIFCOREMD.DLL and LIBMMD.DLL).

以下是我调查这个问题的方法:

我在将 Anaconda 升级到最新版本后遇到了这个问题:

conda update conda
conda update anaconda

I ran Process Monitor https://learn.microsoft.com/en-us/sysinternals/downloads/procmon while doing import scipy.special to trace which DLL it's trying to load and found out it's libifcoremd.dll. ProcMon Trace

然后我搜索了我的 conda pkg 缓存文件夹(~/AppData/Local/Continuum/Anaconda3) 找出哪个包携带这个DLL

$ find . -name '*ifcoremd.*'
./pkgs/icc_rt-2017.0.4-h97af966_0/Library/bin/libifcoremd.dll
./pkgs/mkl-11.3.3-1/Library/bin/libifcoremd.dll
./pkgs/mkl-2017.0.1-0/Library/bin/libifcoremd.dll
./pkgs/mkl-2017.0.3-0/Library/bin/libifcoremd.dll

所以它在两个mkl and icc_rt包。但看起来最新的 anaconda (5.2.0) 发布了更新版本mkl显然不再有 DLL:

$ conda list|egrep '^(mkl|icc_rt)\s'
icc_rt                    2017.0.4             h97af966_0
mkl                       2018.0.2                      1

所以大概当 conda 升级我的mkl,它从我的中删除了 DLLLibrary\bin文件夹。所以强制重装icc_rt,我拿回了 DLL。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于缺少 ._ufuncs dll,Python scipy 模块导入错误 的相关文章

随机推荐