web-dev-qa-db-ja.com

mkl_intel_thread.dll on python実行可能ファイル)をロードできません

これは、CX_FREEZEを使用しているため、pythonインストールされていないunident pythonプログラムを作成しようとしています。しかし、次のエラーが発生します。 "mkl_intel_thread.dllを読み込めません"

pythonインストール(MINICONDA3)を持っているPCでは、CX_FREEZEを使用して実行可能ファイルを構築し、実行可能ファイルを実行したときにMKL_INTEL_THREAD.DLLを読み込めます。 My pythonフォルダ、ライブラリ\ 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()
_

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)
_
7
Carlos

同様の問題がCX_FREEZE 6.1または6.2に影響します。実行可能ファイルは、エラーメッセージまたはWHELのいずれかを起動しません。

Intel MKLエラー:指定されたモジュールが見つかりませんでした。 mkl_intel_thread.dll。
[。] Intel MKL致命的なエラー:mkl_intel_thread.dllをロードできません。

構成:

これは、Python 3.6.8以前のバージョンのNumpyなどでも観察されます。 1.18.4 + MKLまたは1.19.0 + MKL。

BUILDディレクトリのサブディレクトリmkl_rt.dllでは、cx_freezeに3 dll python38.dllvcruntime140.dlllib\numpy\coreが含まれていることを確認しましたが、元のインストールにはDLLサブディレクトリsite-packages\numpy\core(すべてのDLLはsite-packages\numpy\DLLsにあります)に含まれていません。 。 CX_FREEZEを使用してアプリケーションを構築した後、ビルドディレクトリのサブディレクトリmkl_rt.dllからlib\numpy\coreを手動で削除した場合、この問題は消え、アプリケーションが機能します。

このソリューションは、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)

dist_dirは、cx_freezeによって生成されたビルドディレクトリ(build_exeオプションに渡されます)です。

1
jpeg

これら4つのファイルを_cx_freeze_生成されたビルドフォルダにコピーするだけです。

_mkl_core.dll
mkl_def.dll
mkl_intel_thread.dll
mkl_mc3.dll
_
0
sultan