python - 我的自定义宏在我的电脑上工作,但在目标电脑上崩溃
问题描述
我制作了包括 tesseract(用于图像 ocr)、pyautogui(用于键盘鼠标控制)、openpyxl(用于读取和写入 Excel 文件)、PIL(用于图像捕获)的宏,并使用 pyinstaller 将该代码制作为 .exe 文件。
它在我的笔记本电脑(windows10 64 位设备,我在这台笔记本电脑上编码)上完美运行,但应用程序崩溃发生在目标设备(windows7 32 位设备)上。
奇怪的是,该代码在 10~12(随机)宏循环上运行良好。但在那之后,它总是崩溃。
起初,它是 c_type 崩溃,所以我修复了我的代码不使用任何 c_type 东西,但它在相同的 10~12 个循环后崩溃,另一个 python37.dll 崩溃。
我确定 python 和每个 python 库都是 32 位的。
由于安全原因,我根本无法将任何新程序(例如 pycharm 或 python)安装到目标计算机。
有什么办法可以找出问题所在吗?
解决方案
我建议您使用适用于大多数操作系统并处理缺失依赖项的 Pyinstaller 创建应用程序的一些技巧:
使用虚拟环境来构建您的应用程序。它将为您提供更好的结果并避免与当前的 python 构建环境发生任何冲突。并始终尝试在您的环境中安装最新版本的 Pyinstaller。
查找所有应用程序依赖项并尽可能多地捆绑到最终可执行文件中作为 DATA 文件。有时 Pyinstaller 无法捆绑某些模块,因此您需要检查其依赖项并将它们手动添加到您的输出可执行文件中。你可以在这里找到更多信息。
如果您希望您的应用程序在 Win7 等较旧的操作系统上运行,请尝试在 Win7 机器上构建您的应用程序。这是因为 Win10 等新操作系统附带了一些依赖项,但默认情况下它们在 Win7 中不存在。
将调试选项与 Pyinstaller 和您的代码一起使用,以更好地理解您的问题。例如,
--debug=all
在构建时使用会给你更多关于错误的信息。你可以在这里找到更多信息。
推荐阅读
- c++ - 我错过了cin.get()的东西吗?
- python - c$50 金融非整数被拒绝导致 Buy 未通过检查 50
- gps - 逆向工程 delorme PN60w 固件以修复 GPS 翻转
- javascript - 为什么使用忽略垃圾工件的方法替换段落内容不起作用?
- java - 使用 while 循环进行数据验证时出现问题
- python - 如何重定向输出
在python中将对象键入文本文件? - python - 使用邮递员的 GET 请求正在工作,但它不适用于 python (HTTPSConnectionPool)
- node.js - 有没有办法使用嵌套创建批量更新 prisma 中的对象
- vue.js - 是否可以使用 Vue.js 将数据从模板发送到脚本?(v-bind 的逆)
- c - 为什么我的第一个值没有正确打印,但后面的每个值都正确打印