霜龍 2024-02-28 13:49 采纳率: 12.5%
浏览 582
已结题

使用pyinstaller打包项目文件的时候出现Most likely this dynlib/dll was not found when the application was frozen的问题

求助:installer打包项目里面的main.py的时候,打包得到的exe出现以下问题。打包方法使用 pyinstaller -F main.py
在之前出现了模块缺失的问题,因此在spec文件里面增加了hiddenimports=['loguru','torch','xml.dom']后使用pyinstaller -F main.spec打包后,模块缺失问题已经被解决。但是打开exe的时候又出现以下的问题:

img

经过查看地址D:\package_AOI\aoiDevice\dist\main\base_library.zip\utils\dll\x64\MVSDKmd.dll确实没有这个文件
因此我将相关文件复制进了压缩包,但是打开exe依旧出现报错

img

不知道有没有伙伴遇到相同或类似的问题,给予我一些解决问题的方向的建议。

  • 写回答

23条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-02-28 13:50
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    在使用 PyInstaller 打包含有第三方 DLL 依赖的 Python 项目时,遇到 Failed to load dynlib/dll 的错误提示,通常是由于动态链接库 (DLL) 文件未能正确地包含到最终的可执行文件中。根据您提供的信息,程序在运行时无法找到 MVSDKmd.dll 这个动态链接库。

    解决这个问题有以下几种可能的方法:

    1. 添加数据文件:确保必要的 DLL 文件被 PyInstaller 正确识别并打包进最终的 exe 中。您可以通过修改 spec 文件来显式指定这个 DLL 应该作为数据文件包含进来。例如,在 .spec 文件中的 datas 部分添加:
    a = Analysis(['main.py'],
                 pathex=['.'],
                 binaries=[('utils/dll/x64/MVSDKmd.dll', '.')], # 添加 dll 到打包目录下
                 ...
                 datas=[],
                 ...
                 )
    
    1. 使用 --add-binary 选项:如果您直接从命令行打包,可以使用 --add-binary 参数:
    pyinstaller --onefile --add-binary "utils/dll/x64/MVSDKmd.dll;." main.py
    
    1. 将 DLL 放入系统路径:另一种方法是将 DLL 文件放置在一个已知的系统路径(如 Windows 系统目录)中,这样程序在运行时就可以自动查找并加载 DLL。

    2. 配置 hook 文件:对于一些复杂的情况,可能需要编写一个自定义的 hook 文件来指导 PyInstaller 如何处理特定模块或 DLL。创建一个名为 hook-{module_name}.py 的文件,并在其中加入相应的导入规则。

    3. 检查 PATH 变量:如果您的应用程序在运行时通过相对路径寻找 DLL,请确保在解压后的环境中,此相对路径有效。

    综上所述,您应该尝试第一种或第二种方法,确保 MVSDKmd.dll 被打包进 exe 文件内或者与 exe 同目录,以便程序在运行时能找到并加载它。同时,请确保所有依赖的 DLL 版本和您的应用程序兼容。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 创建了问题 2月28日