我正在努力制作.exe文件。 错误消息显示它在9号行有问题,所以我检查了我的代码。有导入的库“ pylibdmtx”用于解码数据矩阵。
所以我尝试删除所有与其他相关属性有关的库,然后就可以了。 我试图找出该问题以进行故障排除,但找不到。所以我终于向你问了我的问题。
我上传了我的问题的记录
谢谢。
答案 0 :(得分:2)
也许来晚了,但是如果其他人对此有疑问,我将分享此信息:
找到了here。
在引导加载程序中,我们使用提取路径调用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)
答案 1 :(得分:0)
诸如pyinstaller和cx_Freeze之类的冻结器无法找到使用ctypes加载的库。 pylibdmtx在pylibdmtx.EXTERNAL_DEPENDENCIES
(ctypes.CDLL实例列表)中公开了这些二进制依赖性。您可以使用pyinstaller规范文件(example)使pyinstaller将其包含在冻结中。
答案 2 :(得分:0)
在使用 Pyinstaller 创建可执行文件时,您可能必须明确包含所需的 DLL 文件。假设所需的 DLL 文件为 xyz.dll
,python 脚本为 myscript.py
,您可以像这样包含 DLL:
> pyinstaller --add-binary xzy.dll;. --onefile myscript.py
这会将 DLL 放在创建的可执行文件中的基本路径中