web-dev-qa-db-fra.com

Impossible de charger mkl_intel_ththread.dll sur python exécutable

J'essaie de créer un exécutable python programme exécuté sous Windows sans python étant installé, pour cela, j'utilise cx_freeze. Mais je reçois ce qui suit ERREUR: "Impossible de charger mkl_intel_thread.dll"

Sur mon PC, qui a python installé (MINICONDA3), j'ai construit l'exécutable à l'aide de CX_FREEEE, et lorsque j'ai exécutable, j'aurais aussi "Impossible de charger mkl_intel_thread.dll". J'ai corrigé cela par Aller à mon python Dossier, bibliothèque\bin et copié le fichier mkl_intel_thread.dll à l'endroit où l'exécutable est placé. Le problème est, lors du déplacement du dossier entier sur un autre PC (sans python installé), cette erreur réapparaît, même si le mkl_intel_thread.dll est dans le dossier.

Fichier que je veux distribuer (Plot.py):

import matplotlib.pyplot as plt

a = [0, 1, 2]
b = [0, 2, 0]
plt.fill(a, b, 'b')
plt.show()

cX_FREEEE SETUP FILE (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)
7
Carlos

Un problème similaire affecte cx_freeze 6.1 ou 6.2: l'exécutable ne se lance pas, ni sans message d'erreur ni avec

Erreur Intel MKL: le module spécifié n'a pas pu être trouvé. mkl_intel_thread.dll.
[.____] Erreur fatale Intel MKL: impossible de charger mkl_intel_thread.dll.

Configuration:

Ceci est également observé avec Python 3.6.8 ou versions antérieures de numpopie tels que E. 1.18.4 + MKL ou 1.19.0 + MKL.

J'ai observé que cx_freeze inclut 3 dlls mkl_rt.dll, python38.dll, et vcruntime140.dll Dans le sous-répertoire lib\numpy\core du répertoire de construction, tandis que l'installation d'origine ne contient aucun DLL dans le sous-répertoire site-packages\numpy\core (toutes les DLL sont en site-packages\numpy\DLLs). Si je supprimais manuellement mkl_rt.dll du sous-répertoire lib\numpy\core du répertoire de construction après la construction de l'application avec CX_FREEEE, le problème disparaît et l'application fonctionne.

Cette solution peut être mise en œuvre en ajoutant le code suivant à la fin de l'setup.py script:

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 est le répertoire de construction généré par cx_freeze (transmis au build_exe option).

1
jpeg

Copiez simplement ces quatre fichiers dans cx_freeze Dossier de construction généré

mkl_core.dll
mkl_def.dll
mkl_intel_thread.dll
mkl_mc3.dll
0
sultan