首页 > 解决方案 > 当我使用 pyinstaller 创建 .exe 文件时,“应用程序被冻结时找不到 dynlib/dll”,因为 pylibmtx 发生了错误

问题描述

在此处输入图像描述

当我在此处输入图像描述

我正在努力制作 .exe 文件。错误消息显示它在第 9 行有问题,所以我检查了我的代码。有导入的库“pylibdmtx”用于解码数据矩阵。

所以我试图用其他相关属性删除该库的所有内容,然后就没事了。我试图找出这个问题以进行故障排除,但我找不到它。所以我最后问你我的问题。

我上传了我的问题的截图

谢谢。

标签: python-3.xpyinstaller

解决方案


也许有点晚了,但如果其他人对此有疑问,我会分享这些信息:

这里找到。

在引导加载程序中,我们使用提取路径调用 SetDllDirectory。出于某种原因,这似乎阻止了从当前目录加载 dll。如果使用 Null 参数调用 SetDllDirectory 以重置 dll 搜索路径,则从当前目录加载 dll 工作。

基于 vlc 和 libvlc.dll 的示例。

不起作用:

import ctypes
import os

os.chdir('C:\\Program Files\\VideoLan\\VLC\\')
print(ctypes.CDLL('libvlc.dll'))

作品:

import ctypes
import os

ctypes.windll.kernel32.SetDllDirectoryW(None)

os.chdir('C:\\Program Files\\VideoLan\\VLC\\')
print(ctypes.CDLL('libvlc.dll'))

因此,如果您的代码使用 ctypes 加载外部 DLL 文件,请确保在加载 DLL 之前添加此行(在 Windows 下测试,不确定其他操作系统)

ctypes.windll.kernel32.SetDllDirectoryW(None)

推荐阅读