python - pyinstaller numpy "Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll"

标签 python numpy dll pyinstaller intel-mkl

我是 Python 应用程序的新手。我正在尝试使用 pyinstaller 构建我的 python GUI 应用程序。 我的应用程序依赖于以下软件包:PyQt4、numpy、pyqtgraph、h5py。 我正在使用 WinPython-32bit-3.4.4.1。

我使用此命令构建应用程序:

pyinstaller --hidden-import=h5py.defs --hidden-import=h5py.utils --hidden-import=h5py.h5ac --hidden-import=h5py._proxy VOGE.py

我使用 pyinstaller 创建的 dist 目录中的 exe 文件启动我的应用程序,它似乎工作正常,直到程序调用 numpy 并因此错误而崩溃:

英特尔 MKL fatal error :无法加载 mkl_intel_thread.dll

mkl_intel_thread.dll 不在软件目录中;但是将文件复制到程序的根目录中我得到了同样的错误

谢谢你的帮助

最佳答案

我在使用 Pyinstaller 和 Numpy 时遇到了同样的问题。默认情况下,pyinstaller 似乎不考虑 numpy 二进制文件,因此您必须手动指定它。您可以添加编辑“.spec”文件“二进制文件”变量的文件,但这仅适用于您当前的程序。如果您希望它适用于您卡住的所有程序,您应该制作一个“钩子(Hook)”并将其保存在 C:\Python3*\Lib\site-packages\PyInstaller\hooks 中。

我必须修改 LeonidR 的代码才能使 numpy-hook 正常工作。我使用列表理解使用更现代的 pythonic 方法重写了它:

from PyInstaller import log as logging 
from PyInstaller import compat
from os import listdir

mkldir = compat.base_prefix + "/Lib/site-packages/numpy/core" 
logger = logging.getLogger(__name__)
logger.info("MKL installed as part of numpy, importing that!")
binaries = [(mkldir + "/" + mkl, '') for mkl in listdir(mkldir) if mkl.startswith('mkl_')] 

“二进制文件”是一个元组列表。元组的第二项对应于您要放置“dll”的文件夹。在本例中为空,因此它会将它们直接复制到“.exe”所在的主文件夹中。

关于python - pyinstaller numpy "Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35478526/

相关文章:

python - 如何从 N2Y0.com 提取数据

python - 根据纬度和日出时间计算经度?

linux - 即使 vm.overcommit_memory=1 ,numpy 也不会过度使用内存

python - 如何根据条件更改 2d numpy 数组的元素

c++ - 使用 CMake 编译带有链接 dll 的应用程序。需要查看工作示例

C# 4.0 将 .dll 程序集与 .NET 合并

C++ DLL插件接口(interface)

python,如何通过改变其格式来更新字典?

python - 使用 pyodbc 时,SQL Server DateTimeOffset 将 tz 感知日期时间的偏移量更改为系统偏移量

python - 大型数据集的贪婪集覆盖有什么好的实现吗?