以前我问过类似的问题:cx_Freeze unable fo find mkl: MKL FATAL ERROR: Cannot load mkl_intel_thread.dll
但是现在我有一个细微的差别。我想仅在cmd.exe
终端内运行该程序而无需安装anaconda,但是似乎我做错了或无法执行。
在使用python setup.py bdist_msi
和cx-freeze
生成我的应用程序之后,我可以在anaconda环境中安装并运行它,但是如果我只是打开一个cmd.exe
终端并运行它,我得到
INTEL MKL ERROR: The specified module could not be found. mkl_intel_thread.dll.
Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.
但是,在运行时
where mkl_intel_thread.dll
找到了dll,所以我认为这意味着它已在系统中注册(我更习惯使用Linux,所以可能我错了。)
我该如何解决这个问题?
答案 0 :(得分:2)
也许缺少MKL所需的另一个DLL,例如libiomp5md.dll
,并导致错误。参见Cannot load mkl_intel_thread.dll on python executable,我的回答及其评论。
如果这仍然不能解决您的问题,请尝试将其他DLL从anaconda环境的库路径手动复制到应用程序安装目录及其lib
子目录中。一旦发现缺少哪个依赖项,就可以使用cx_Freeze的include_files
选项自动执行设置步骤(如您所知)。
另一个可能的问题是,您的系统上安装了不兼容的MKL版本,并且冻结的应用程序找到了错误的版本,但这不太可能,除非您在64位系统上安装了32位Python或已在另一个系统上安装了该应用程序。
编辑:
尽管mkl_intel_thread.dll
找到了冻结的应用程序,但仍然可能仅仅是冻结的应用程序找不到了。 where
在环境变量where
给定的系统搜索路径中查找,而Python在PATH
给定的模块搜索路径中查找,该路径通常不包含{{1}的内容},请参见Where is Python's sys.path initialized from?。但是,在Windows上,已注册的DLL有一种备用机制(我不知道它是如何工作的)。无论如何,一旦打算在另一系统上安装和运行该应用程序,就不应依赖于此后备,因为可能没有在那里安装必需的DLL。因此,必需的依赖项应始终包含在安装目录中。
答案 1 :(得分:1)
最近我在python3.7中遇到了同样的错误。我没有选择移动Dll的选项,我只是这样做就解决了这个问题。
conda install cython
安装cython之后,所有dll都放在正确的位置。
答案 2 :(得分:1)
根据 https://stackoverflow.com/a/56186333/977566,我将 c:\windows\system32\libiomp5md.dll 重命名为 .bak 并为我修复了它。
答案 3 :(得分:0)
设置 CONDA_DLL_SEARCH_MODIFICATION_ENABLE=1;
会解决你所有的问题