6

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

import PySpin当我在Spyder(不幸的是,从 conda 提示符而不是 Spyder ( python foo.pywhere foo.pycontains import PySpin) 运行导入会产生:

英特尔 MKL 致命错误:无法加载 mkl_intel_thread.dll。

序数 242 不能位于动态链接库 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

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

例如在这里他们提到了这个解决方案:
序数 242 不能位于动态链接库 Anaconda3\Library\bin\mkl_intel_thread.dll

4

3 回答 3

4

当我第一次导入 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

我在带有 Miniconda 的 Windows 10 下使用 Python 3.5。

于 2019-04-23T14:00:23.863 回答
3

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

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

move %CONDA_PREFIX%\Lib\site-packages\PySpin\libiomp5md.dll %CONDA_PREFIX%\Lib\site-packages\PySpin\libiomp5md.bak
于 2019-05-05T23:37:55.630 回答
1

Point Gray 推荐的解决方案

来自 Point Grey 的开发人员,我通过电子邮件向他们发送了有关此问题的信息,他们已经意识到了这一点。他们建议删除使用 conda 安装的 numpy 并使用 pip 重新安装。那是:

conda uninstall numpy
pip install numpy

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

更新:这工作了一天左右,但是当我添加其他依赖项/更新(特别是 OpenCV)时,它在我手中停止工作。但是,也许其他人会对此解决方案有更好的运气,因此我将其留在这里。


第二种解决方案

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

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

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

python foo.py

而这一次它奏效了。所以,在我在 ipython 中做之前它不起作用,现在它起作用了。

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

我将这些解决方案留在这里,但坦率地说,我会尝试在 PySpin 之前导入 numpy,就像在接受的答案中一样。它更容易,破坏性更小。

于 2019-04-22T18:35:18.340 回答