在 Conda 中导入 PySpin:找不到 mkl_intel_thread.dll

Import PySpin in Conda: fails to find mkl_intel_thread.dll

我在 Anaconda 中将 PySpin api 用于 Point Grey 相机。 api 是一个名为 Spinnaker (https://www.ptgrey.com/spinnaker-sdk) 的 C++ 库的 Python 包装器。

当我在 Spyder (import PySpin) 中导入时,一切正常(请注意,我在安装了所有内容的环境中从 Conda 提示符启动 Spyder)。不幸的是 运行 从 conda 提示而不是 Spyder 导入(python foo.py 其中 foo.py 包含 import PySpin)产生:

Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.

The ordinal 242 could not be located in the dynamic link library C:\Anaconda3\Library\bin\mkl_intel_thread.dll

注意我在 anaconda 提示符下从轮子安装了 Spinnaker (PySpin):

pip install spinnaker_python-1.20.0.15-cp36-cp36m-win_amd64.whl

网上一堆地方说在C:\Windows\System32找到以下文件重命名或删除:

mkl_core.dll
mkl_def.dll
mkl_intel_thread.dll

我的机器上没有这些文件,所以这似乎不是我的问题。

例如他们在这里提到的解决方案:

Point Grey 推荐的解决方案

来自 Point Grey 的开发人员,我通过电子邮件向他们发送了有关此问题的信息,他们知道了。他们建议删除使用 conda 安装的 numpy,然后使用 pip 重新安装它。即:

conda uninstall numpy
pip install numpy

请注意,虽然这有效,但我不能保证它会在包含其他依赖项的复杂项目中很好地扩展。

更新: 这工作了一天左右,但在我手中它在我添加其他 dependencies/updates(特别是 OpenCV)时停止工作。但是,也许其他人会更喜欢这个解决方案,所以我会把它留在这里。


第二种解决方案

如果您在使用其他解决方案时遇到问题,也许可以试一试它对我有用:运行 来自 ipython 的代码从 conda 提示启动,然后 运行 再次来自 conda:

ipythyon
%run foo.py  #script containing import PySpin
exit()

它在那里工作,这并不奇怪(这基本上就是 Spyder 所做的)。奇怪的是,回到 conda 提示我再次尝试 运行ning 程序:

python foo.py

这次成功了。因此,在我在 ipython 中执行此操作之前它无法正常工作,现在它 正在 工作。

坦率地说,我不知道为什么这解决了问题,但确实如此。 \_(ツ)_/

我将把这些解决方案留在这里,但坦率地说,我会尝试在 PySpin 之前导入 numpy,就像在接受的答案中一样。它只是更容易且干扰更少。

当我第一次导入 numpy 和导入 PySpin 时,它对我有用。

import numpy as np # must be imported first
import PySpin

system = PySpin.System.GetInstance()
version = system.GetLibraryVersion()
print('Library version: %d.%d.%d.%d' % (version.major, version.minor, version.type, version.build))
# Library version: 1.20.0.15

我在 Windows 10 下使用 Python 3.5 和 Miniconda。

此问题是由 spinnaker_python wheel 中包含的文件 libiomp5md.dll 与 Anaconda 发行版不兼容引起的。简单地删除或重命名此文件将导致加载文件的默认 Anaconda 版本。

在 Anaconda 提示符下执行以下命令来解决问题。如果所有用户都安装了Anaconda,需要Administrator版本的Anaconda prompt。

move %CONDA_PREFIX%\Lib\site-packages\PySpin\libiomp5md.dll %CONDA_PREFIX%\Lib\site-packages\PySpin\libiomp5md.bak