Не удается загрузить mkl_intel_thread.dll на исполняемый файл Python - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь создать исполняемую программу на Python, которая запускается в Windows без установки Python, для этого я использую cx_Freeze. Но я получаю следующую ошибку: «Не удается загрузить mkl_intel_thread.dll»

На моем ПК, на котором установлен python (miniconda3), я собрал исполняемый файл с помощью cx_Freeze, и когда я запускал исполняемый файл, я также получал «Cannot load mkl_intel_thread.dll». Я исправил это, перейдя в папку python, Library \ bin, и скопировал файл mkl_intel_thread.dll туда, где находится исполняемый файл. Проблема заключается в том, что при перемещении всей папки на другой компьютер (без установленного 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()

Файл установки 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)

1 Ответ

0 голосов
/ 25 января 2019

РЕДАКТИРОВАТЬ:

  1. Попробуйте скопировать все файлы, начиная с mkl, которые вы найдете под Library\bin или numpy\core в папку сборки, а также libiomp5md.dll, см. Python Pyinstaller 3.1 ФАКТИЧЕСКАЯ ОШИБКА Intel MKL: Не удается загрузить mkl_intel_thread.dll и cx_freeze преобразованное приложение GUI (tkinter) падает после нажатия кнопки plot .

    После того, как вы получилиВыяснив, какие файлы необходимо скопировать вручную, можно разрешить cx_Freeze включить необходимые файлы, используя список include_files параметров build_exe (см. фрагмент кода ниже).При необходимости вы можете использовать кортеж (source, destination) в качестве элемента в списке include_files, чтобы cx_Freeze скопировал файл из source в определенный destination в каталог сборки, см. cx_Freezeдокументация .

  2. Я вижу дальнейшие потенциальные проблемы в сценарии установки, который вы разместили в своем вопросе:

    • включает в себя целые numpy пакеты с использованием packagesсписок параметров build_exe, проще и, может быть, безопаснее
    • безопаснее динамически определять местоположение библиотек DLL TCL / TK
    • для cx_Freeze 5.1.1,Библиотеки TCL / TK должны быть включены в подкаталог 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.
                                      ]}

вСценарий установки.

...