【发布时间】:2017-09-26 00:51:09
【问题描述】:
我有一个使用 OpenCV 的 Python 3.5 64 位程序(适用于 Windows 的 tensorflow 需要)。我正在使用 pyinstaller 分发它。
我使用 Windows 10 构建了我的程序
/c/Python35/Scripts/pyinstaller -c DeepMeerkat.spec
在我的电脑上,.exe 可以完美构建和运行。在任何其他非 Windows 10 机器上
开启
import cv2
返回
ImportError: DLL load failed: 找不到指定的模块。
我可以在pyInstaller thread 上看到大量关于此的讨论, 但我不知道如何将其付诸实践。 Dependency walker 说我缺少一些 DLL
api-ms-win-crt-**.dll
好的,从 pyInstaller 线程中,我知道这些 DLL 存在
C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs
基于架构的多个子文件夹下。
我尝试添加到我的 .spec 文件中
pathex=["C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/"],
或者对于我的特定架构
pathex=["C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/arm"],
我认为有人建议here
“安装适用于 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
但我可以在这里看到那个 DLL
C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\arm
然后我就从字面上复制了整个文件夹
cp -r "C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/" dist/Lib/
但不清楚如何将这些连接到.exe。显然,最好让 pyInstaller 事先知道。
我也试过
/c/Python35/Scripts/pyinstaller --path "C:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs/arm" -c DeepMeerkat.spec
它仍然没有找到它们
我也尝试将该文件夹添加到 PATH。有什么想法吗?
【问题讨论】:
-
我无法完成这项工作,即使找到了 dll。 “解决方案”是只使用我的安装程序在用户的机器上安装 vcredist_x86.exe,这解决了它,即使它们看起来相同。可能是用户机器上的 PATH 问题。
-
您使用的是哪个版本的 PyInstaller?上个月发布的 3.3 版修复了 Windows 10 上 Python >=3.5 的问题。
-
我按照维护者的指示使用了github上的dev分支。
标签: python windows opencv pyinstaller