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