为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 python 可执行文件上加载 mkl_intel_thread.dll

无法在 python 可执行文件上加载 mkl_intel_thread.dll

千巷猫影 2021-10-19 09:55:37
我正在尝试创建一个可执行的 python 程序,它在没有安装 python 的情况下在 Windows 上运行,为此我使用了 cx_Freeze。但我收到以下错误:“无法加载 mkl_intel_thread.dll”在我安装了 python (miniconda3) 的 PC 上,我使用 cx_Freeze 构建了可执行文件,当我运行该可执行文件时,我也会得到“无法加载 mkl_intel_thread.dll”。我通过转到我的 python 文件夹 Library\bin 解决了这个问题,并将 mkl_intel_thread.dll 文件复制到了可执行文件所在的位置。问题是,当将整个文件夹移动到另一台 PC(未安装 python)时,即使 mkl_intel_thread.dll 位于该文件夹中,此错误也会再次出现。我要分发的文件(plot.py):import matplotlib.pyplot as plta = [0, 1, 2]b = [0, 2, 0]plt.fill(a, b, 'b')plt.show()cx_Freeze 设置文件 (setup.py):import cx_Freezeimport sysimport matplotlibimport numpyimport osos.environ['TCL_LIBRARY'] = "C:\\Miniconda3\\tcl\\tcl8.6"os.environ['TK_LIBRARY'] = "C:\\Miniconda3\\tcl\\tk8.6"executables = [cx_Freeze.Executable("plot.py")]build_exe_options = {"includes":['numpy.core._methods',        'numpy.lib.format', 'matplotlib.backends.backend_tkagg']}cx_Freeze.setup(    name = "script",    options = {"build_exe": build_exe_options},    version = "0.0",    description = "A basic example",    executables = executables)
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

类似的问题影响 cx_Freeze 6.1 或 6.2:可执行文件不启动,没有错误消息或

INTEL MKL 错误:找不到指定的模块。mkl_intel_thread.dll。
英特尔 MKL 致命错误:无法加载 mkl_intel_thread.dll。

配置:

  • 视窗 10

  • 从https://www.python.org/安装的 Python 3.8.5

  • numpy 1.19.1+mkl 使用来自https://www.lfd.uci.edu/~gohlke/pythonlibs/ 的轮子通过 pip 安装

  • 使用pip安装的各种python模块

这也可以在 Python 3.6.8 或更早版本的 numpy 中观察到,例如 1.18.4+mkl 或 1.19.0+mkl。

我观察到 cx_Freeze在构建目录的子目录中包含 3 个 DLL mkl_rt.dllpython38.dll和,而原始安装在子目录中不包含任何 DLL (所有 DLL 都在 中)。如果我在使用 cx_Freeze 构建应用程序后手动从构建目录的子目录中删除,问题就会消失并且应用程序可以运行。vcruntime140.dlllib\numpy\coresite-packages\numpy\coresite-packages\numpy\DLLsmkl_rt.dlllib\numpy\core

该解决方案可以通过在setup.py脚本末尾添加以下代码来实现:

numpy_core_dir = os.path.join(dist_dir, 'lib', 'numpy', 'core')

for file_name in os.listdir(numpy_core_dir):

    if file_name.lower().endswith('.dll'):

        file_path = os.path.join(numpy_core_dir, file_name)

        os.remove(file_path)

其中dist_dir是通过cx_Freeze生成生成目录(传递给build_exe选项)。


查看完整回答
反对 回复 2021-10-19
?
DIEA

TA贡献1820条经验 获得超2个赞

在使用 cx_Freeze==6.5.3 时,通过将 numpy==1.18.2 从 numpy==1.19.1 降级,设法找到解决方案。


查看完整回答
反对 回复 2021-10-19
  • 2 回答
  • 0 关注
  • 468 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信