Pyinstaller将opencv从Windows 10分发到Windows <10,缺少ucrt dlls api-ms-win-crt

bw4*_*4sz 11 python windows opencv pyinstaller

我有一个使用OpenCV的Python 3.5 64位程序(Windows的tensorflow需要).我用pyinstaller分发它.

我用Windows 10构建了我的程序

/c/Python35/Scripts/pyinstaller -c DeepMeerkat.spec
Run Code Online (Sandbox Code Playgroud)

在我的计算机上,.exe构建并运行完美.在任何其他非Windows 10计算机上

import cv2
Run Code Online (Sandbox Code Playgroud)

返回

ImportError:DLL加载失败:找不到指定的模块.

我可以在pyInstaller线程上看到关于它的大量讨论,但我不能完全告诉如何将它付诸实践.依赖性walker说我缺少一些DLL

api-ms-win-crt-**.dll
Run Code Online (Sandbox Code Playgroud)

好的,从pyInstaller线程,我知道这些DLL存在

C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs
Run Code Online (Sandbox Code Playgroud)

基于架构的多个子文件夹下.

我尝试添加到我的.spec文件中

pathex=["C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/"],
Run Code Online (Sandbox Code Playgroud)

或者我的特定架构

pathex=["C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/arm"],
Run Code Online (Sandbox Code Playgroud)

我认为这是在这里建议的

"安装适用于Windows 10的Windows软件开发工具包(SDK)并展开.spec文件以包含所需的DLL,请参阅上述链接中的"分发使用通用CRT的软件",编号为6.

那没有任何效果.我收到了数以百计的错误

121472 WARNING: lib not found: api-ms-win-crt-runtime-l1-1-0.dll dependency of c:\python35\DLLs\_ssl.pyd
Run Code Online (Sandbox Code Playgroud)

但我可以在这里看到DLL

C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\arm
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

那么我就把整个文件夹复制到了posthoc

cp -r "C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/" dist/Lib/
Run Code Online (Sandbox Code Playgroud)

但目前尚不清楚如何将这些连接到.exe.显然,让pyInstaller事先知道是可取的.

我也试过了

/c/Python35/Scripts/pyinstaller --path "C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/arm" -c DeepMeerkat.spec
Run Code Online (Sandbox Code Playgroud)

它仍然没有找到它们

我也尝试将该文件夹添加到PATH.有任何想法吗?

alt*_*dky 1

我需要自己做这件事,但还没有。当我这样做时,我会尝试发布我的完整解决方案。同时...

我认为您可能必须明确请求将它们包含在内,而不仅仅是扩展搜索路径。

https://pythonhosted.org/PyInstaller/spec-files.html#adding-binary-files

可能使用Tree他们提到的类来为您收集所有文件。

https://pythonhosted.org/PyInstaller/advanced-topics.html#the-tree-class