python - 在其他计算机上测试 EXE 时找不到 PyInstaller ImportError DLL

标签 python pyinstaller

我使用 PyInstaller 从 Python 脚本构建了一个 EXE 文件,使用

pyinstaller --onefile myscript.py

我使用的包:

pandas, numpy, imutils, opencv, logging, os, random, json, string, csv, datetime, uuid

EXE 在我的电脑上运行良好。但是,当我在另一台 PC 上尝试时,出现此屏幕截图中显示的错误:https://www.screencast.com/t/msZrURL4v

知道问题出在哪里吗?

最佳答案

您发布的错误只是说“我正在寻找一个特定的 DLL,但没有找到它”。

与其安装其他可能或可能不包含或以某种方式包含正确 DLL 的包和扩展,您现在需要准确确定找不到的是什么。

我可以推荐三种互补的方法,没有一种方法可以绝对确定确切的问题(当然“随机安装一些软件包并查看它是否修复它”的巫术方法也可能有效,而且经常有效——但这很神奇,不是计算机科学):

  • 最快:检查 pyimod03_importers.py 文件的第 714 行,看看抛出异常时它在做什么。由于 Windows 的库加载策略,您可能会被转移注意力,报告文件实际上不存在,因为它依赖于第二个丢失的文件,您不会被告知其名称。
  • 最简单的方法:使用 SysInternals 的 DEPENDS.EXE 等工具检查 OMR.EXE 文件。这几乎可以保证在这种情况下不起作用,因为所需的导入可能以 Python 格式指定,而不是 DEPENDS.EXE 可以识别的任何形式。
  • 最全面,但最不简单:使用像 SysInternals 的 PROCMON 这样的工具,设置过滤器以排除 Windows 空闲状态的背景噪音 - 会有很多 - 然后假装运行 OMR.EXE ;排除由此产生的额外噪音。您需要设置大约四十个过滤器。最后运行OMR.EXE。接近尾声时,您会看到一系列尝试加载 SOMETHING.DLL 的尝试,但都失败了;第一个是 DLL 应该位于的位置(通过 Python 或 OMR),其他都是合适的替代方案。

然后:

  • 如果 DLL 是您的一个,请了解如何将它们与 EXE 包一起打包。
  • 如果不是,您需要可靠地评估在哪里可以找到它。
    • 很可能您得到的建议 - 安装 MSVC 可再发行版本或其他版本 - 是绝对正确的。名称为 MSVCnn... 的库属于该包。 MSO... 文件通常属于 Microsoft Office 可再发行组件。 MSJET... 文件可在多个 Microsoft 软件包中找到,例如 .NET 可再发行组件。
    • 否则,Google 和可能的 MSDN 搜索引擎就是您的 friend 。

根据以往的经验,我建议先搭建一个虚拟机进行测试,然后看看需要什么包。这是因为第一个 DLL 崩溃会隐藏任何后续的崩溃,您可能需要多次重复上述步骤。您需要的第一个库由 NETFX64 包提供,第二个由 Microsoft Office 运行时提供,这一事实可能是正确的,但是当您发现需要第二个库时,您可能还会发现 MSO 运行时会提供第一也;所以在那一刻,而不是之前,您发现 NETFX64 包并不是真正需要的,并且可以将您的安装要求简化为单独的 MSO 运行时。

将需求归结为一个简短的列表可能是一项漫长的任务,并且您会不止一次地希望从头开始重新启动机器。使用 VM,这很容易做到。

(我一直提到 MSO 运行时,因为我认为您的程序将处理复选框答案模块,并且可能需要或相信它需要 MSO 运行时提供的一些扫描仪识别功能。如果是这样,他们可能会排在最后)。

关于python - 在其他计算机上测试 EXE 时找不到 PyInstaller ImportError DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52120694/

相关文章:

python - 多元线性回归 python

python - Pyinstaller - 使用 multiprocessing.freeze_support 时为 "Fatal error ! Failed to execute script"

python - 从 python 调用 EMBOSS 程序时遇到问题

python - 如何使用 xmpppy 向聊天室发送消息?

python - PyInstaller 和 Pandas

python - 如何在 PyQt5 中使用 PyInstaller --onefile 选项和 resource_path 通过样式表添加图标?

python - 模块脚本的 Pyinstaller

python-2.7 - Pyinstaller 生成的 exe 无法在另一台计算机上运行

Python 记录器不遵守 setLevel?

python - 连续 3 维变量的离散化