J'essaie de créer un programme python exécutable qui s'exécute sur Windows sans que python soit installé, pour cela j'utilise cx_Freeze. Mais j'obtiens l'erreur suivante: "Impossible de charger mkl_intel_thread.dll"
Sur mon PC, sur lequel python est installé (miniconda3), j'ai construit l'exécutable en utilisant cx_Freeze, et quand j'ai exécuté l'exécutable, j'obtiendrais également "Impossible de charger mkl_intel_thread .dll ". J'ai corrigé cela en accédant à mon dossier python, Library \ bin, et en copiant le fichier mkl_intel_thread.dll dans l'emplacement de l'exécutable. Le problème est que, lors du déplacement du dossier entier vers un autre PC (sans python installé), cette erreur réapparaît, même si mkl_intel_thread.dll se trouve dans le dossier.
Fichier que je veux distribuer (plot.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)
Fichier de configuration cx_Freeze (setup.py):
import matplotlib.pyplot as plt a = [0, 1, 2] b = [0, 2, 0] plt.fill(a, b, 'b') plt.show()
3 Réponses :
MODIFIER:
Essayez de copier tous les fichiers commençant par mkl
que vous trouvez sous Library \ bin
ou numpy \ core
dans le dossier de construction, ainsi que libiomp5md.dll
, voir Python Pyinstaller 3.1 Intel MKL FATAL ERROR: Impossible de charger mkl_intel_thread.dll a> et cx_freeze converti GUI-app (tkinter) se bloque après avoir appuyé sur le bouton plot .
Une fois que vous avez identifié le (s) fichier (s) à copier manuellement, vous pouvez laisser cx_Freeze
inclure le (s) fichier (s) nécessaire (s) en utilisant le code include_files > liste des options
build_exe
(voir l'extrait de code ci-dessous). Si nécessaire, vous pouvez utiliser un tuple (source, destination)
comme élément dans la liste include_files
pour permettre à cx_Freeze
de copier un fichier depuis source
vers une destination
spécifique dans le répertoire de construction, voir le cx_Freeze
documentation .
Je vois d'autres problèmes potentiels dans le script de configuration que vous avez publié dans votre question:
numpy
en utilisant la liste packages
des options build_exe
, c'est plus facile et peut-être plus sûr cx_Freeze
5.1.1, les DLL TCL / TK doivent être incluses dans un sous-répertoire lib
du répertoire de construction En résumé, essayez d'utiliser
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. ]}
dans votre script de configuration.
sur mon PC, cela me donnera toujours "Intel MKL FATAL ERROR: Impossible de charger mkl_intel_thread.dll.". Mais encore une fois, je peux copier la dll dans le dossier et cela fonctionnera.Je vais transférer sur l'autre PC plus tard, mais je soupçonne que cela donnera la même erreur.
Essayez de copier tous les fichiers commençant par mkl
que vous trouvez sous Library \ bin
ou numpy \ core
dans le dossier de construction, ainsi que libiomp5md.dll
, voir ce message et ce message .
@Carlos Ça a l'air génial. J'ai modifié ma réponse en conséquence.
Copiez simplement ces quatre fichiers dans le dossier de construction généré par cx_freeze
mkl_core.dll mkl_def.dll mkl_intel_thread.dll mkl_mc3.dll
Bien que cela puisse résoudre le problème, tt serait bon si des détails supplémentaires sont fournis.
Dans mon cas, la suppression de lib / numpy / core / mkl_rt.dll
a résolu le problème.
Un problème similaire affecte cx_Freeze 6.1 ou 6.2: l'exécutable ne se lance pas, soit sans message d'erreur, soit avec
INTEL MKL ERROR: Le module spécifié est introuvable. mkl_intel_thread.dll.
Intel MKL FATAL ERROR: impossible de charger mkl_intel_thread.dll.
Configuration:
Ceci est également observé avec Python 3.6.8 ou des versions antérieures de numpy telles que par exemple 1.18.4 + mkl ou 1.19.0 + mkl.
J'ai observé que cx_Freeze inclut 3 DLL mkl_rt.dll
, python38.dll
, et vcruntime140.dll
dans le sous-répertoire lib \ numpy \ core
du répertoire de construction, alors que l'installation d'origine ne contient aucune DLL dans le sous-répertoire site-packages \ numpy \ core
(toutes les DLL sont dans site-packages \ numpy \ DLL
). Si je supprime manuellement mkl_rt.dll
du sous-répertoire lib \ numpy \ core
du répertoire de construction après avoir créé l'application avec cx_Freeze, le problème disparaît et l'application fonctionne. p>
Cette solution peut être implémentée en ajoutant le code suivant à la fin du script 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)
où dist_dir
est le répertoire de construction généré par cx_Freeze (passé à l'option build_exe
).
Quelle version de
cx_Freeze
utilisez-vous?@jpeg La dernière version sur anaconda.org, 5.1.1