我是 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/