python-3.x 当我使用pyinstaller制作一个.exe文件时,”应用程序冻结时找不到dynlib/dll“,因为pylibmtx发生了错误

syqv5f0l  于 2023-03-20  发布在  Python
关注(0)|答案(6)|浏览(165)

当我

我正在努力使.exe文件。错误消息显示,它有问题的第9行,所以我检查了我的代码。有导入库“pylibdmtx”这是解码的datamatrix。
所以我试着删除所有关于这个库和其他相关属性,然后它就好了。我试着找出这个问题进行故障排除,但是我找不到它。所以我最后问你我的问题。
我上传了我的问题
谢谢。

nom7f22z

nom7f22z1#

也许有点晚了,但我会分享这个信息是任何其他人都有这个问题:
找到here
在bootloader中,我们使用提取路径调用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'))

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

ctypes.windll.kernel32.SetDllDirectoryW(None)
uqcuzwp8

uqcuzwp82#

pyinstaller和cx_Freeze等冻结器无法找到使用ctypes加载的库。pylibdmtx在pylibdmtx.EXTERNAL_DEPENDENCIES中公开了这些二进制依赖项-ctypes. CDLL的示例列表。您可以使用pyinstaller规范文件(示例)让pyinstaller将这些依赖项包含在冻结中。

xmd2e60i

xmd2e60i3#

在使用Pyinstaller创建可执行文件时,您可能需要显式地包含所需的DLL文件。假设所需的DLL文件是xyz.dll,python脚本是myscript.py,您可以像这样包含DLL:

> pyinstaller --add-binary xzy.dll;. --onefile myscript.py

这会将DLL放置在创建的可执行文件内的基路径中

bnlyeluc

bnlyeluc4#

现在已经晚了,但我必须说什么修复了一个问题,花了3天的时间来解决,简单地安装c++ redistributable和重新启动机器解决了我的probelm

zzoitvuj

zzoitvuj5#

将MCVCP*.DLL的相关版本与您的程序捆绑在一起,以满足该DLL的需要。

rqmkfv5c

rqmkfv5c6#

一个简短的说明是,在某些情况下,您可能需要添加dll文件的完整地址。

> pyinstaller --add-binary "--add-binary "C:\Users\User\…\xzy.dll;." --onefile myscript.py

相关问题