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

Car*_*los 4 python numpy matplotlib intel-mkl cx-freeze

我正在尝试创建一个在Windows上运行但不安装python的可执行python程序,为此,我正在使用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 plt

a = [0, 1, 2]
b = [0, 2, 0]
plt.fill(a, b, 'b')
plt.show()
Run Code Online (Sandbox Code Playgroud)

cx_Freeze设置文件(setup.py):

import cx_Freeze
import sys
import matplotlib
import numpy
import os

os.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)
Run Code Online (Sandbox Code Playgroud)

jpe*_*peg 5

编辑:

  1. 尝试复制所有文件开始mkl你下找到Library\bin或者numpy\core到build文件夹,以及libiomp5md.dll,看到的Python Pyinstaller 3.1英特尔MKL致命错误:无法加载mkl_intel_thread.dllcx_freeze转换GUI的应用程序(Tkinter的)按情节按钮后崩溃

    一旦找到需要手动复制的文件,就可以cx_Freeze通过使用选项include_files列表来包括必要的文件build_exe(请参见下面的代码片段)。如有必要,您可以(source, destination)include_files列表中使用元组作为项,以cx_Freeze将文件从复制source到特定destination目录复制到构建目录中,请参阅cx_Freeze文档

  2. 我在问题中发布的安装脚本中看到了其他潜在问题:

    • numpy使用选项packages列表包含整个软件包build_exe,这更容易,甚至更安全
    • 动态找出TCL / TK DLL的位置更安全
    • 对于cx_Freeze5.1.1,TCL / TK DLL必须包含在lib构建目录的子目录中

总之,尝试使用

PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')

build_exe_options = {'packages': ['numpy'],
                     'includes': ['matplotlib.backends.backend_tkagg'],
                     'include_files': [(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
                                        os.path.join('lib', 'tcl86t.dll')),
                                       (os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
                                        os.path.join('lib', 'tk86t.dll'))
                                       # add here further files which need to be included as described in 1.
                                      ]}

Run Code Online (Sandbox Code Playgroud)

在您的安装脚本中。

  • 尝试将在 `Library\bin` 或 `numpy\core` 下找到的所有以 `mkl` 开头的文件以及 `libiomp5md.dll` 复制到构建文件夹中,请参阅 [这篇文章](https://stackoverflow.txt)。 com/q/35078548/8516269)和[这篇文章](/sf/answers/2442575341/)。 (2认同)