【问题标题】:py2exe to exe file, it can run on my pc but show DLL load failed in other pcspy2exe 到 exe 文件,它可以在我的电脑上运行,但在其他电脑上显示 DLL 加载失败
【发布时间】:2016-01-06 13:00:12
【问题描述】:

我用模块 opencv、Tkinter、PIL Numpy 和一些内置模块编写了一个 gui 程序“test.py”。我用py2exe为这个程序生成了一个exe文件,这个exe文件在我的电脑上运行良好,但是当我在其他电脑上尝试时,它给了我

文件“test.py”,第 8 行 文件“cv2.pyc”,第 12 行 文件“cv2.pyc”,第 10 行,在 __load ImportError: DLL load failed 找不到指定的模块

我的电脑有 Python 是 32 位的

【问题讨论】:

  • 您可能在代码中使用了其他电脑上不存在的绝对路径
  • 您的电脑是 windows 10 和另一台电脑的 windows 版本不同吗?

标签: python opencv py2exe


【解决方案1】:
  1. 在您的 cv2.pyd 上从“站点包”使用 Dependency Walker (http://www.dependencywalker.com/)。
  2. 查看左上角,即图书馆树所在的位置。
  3. 普通库有蓝色或灰色图标,找到左边有红色图标的库,像这样:http://i.stack.imgur.com/YiEuD.png
  4. 找到带有红色标志的 API 并记住带有红色图标的库的父库名称。红旗表示父库需要一些底层库中不存在的 API。在我的例子中,带有红色图标的库是“kernel32.dll”,它的父库是 msvcr90.dll、tbb.dll 和来自“winsxs”的库,名称是模糊的。
  5. 通常可以通过获取正确版本的父库来解决问题。例如,您尝试在 Windows XP 上使用为 Windows Vista 编译的 DLL。此 DLL 导入了一个“InitializeCriticalSectionEx”API,Windows XP 的“kernel32.dll”中没有该 API。获取 DLL 的 XP 版本或使用“InitializeCriticalSection”而不是“Ex”重新编译它可以解决问题。另一个示例:您正在使用编译为与 Qt 4.8.4 和 PyQt4 一起使用的 OpenCV,其中包含 Qt 版本 4.7。 cv2.pyd(顺便说一句,这是一个 DLL)将拒绝导入,因为 OpenCV 中所需的某些 Qt API 在 4.7 的 DLL 中不可用。解决方案是将 Qt 库版本 4.8.4 放入您的 '%PYTHONHOME%\Lib\site-packages\PyQt4' 文件夹或 PATH 中。在从 git repo 构建自己的 OpenCV 版本时,我自己也遇到了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2018-05-02
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多