PyInstaller 打包的应用程序在控制台模式下工作正常,在窗口模式下崩溃

2023-11-21

我正在使用 Python 和 PySide 构建一个相当复杂的应用程序。发布的日子终于临近了,所以我想将此应用程序构建为 exe。

然而,我手上有一个奇怪的问题。我过去使用过 PyInstaller(顺便说一下,使用版本 2),但从未发生过这种情况。

基本上,当我使用以下命令构建应用程序时--console标志,它工作正常 - 但它打开控制台窗口。当我使用窗口标志构建应用程序时(-w),它不能正常工作。它开始了,一切都开始了,但还有所有这些奇怪的故障。例如,加载文本文件通常会引发BadFileDescriptor错误(在控制台模式下不会发生),并且应用程序在执行特定任务后崩溃。更糟糕的是,该任务是一个循环,第一次执行得很好,但是当它再次开始工作时,它就崩溃了。

当我查看小型转储文件时,发现了一些有关 QtGui4.dll 文件内存访问冲突的错误。同样,在控制台模式下不会发生这种情况。

有人有主意吗?


The BadFileDescriptor错误以及随后的内存访问冲突是由以下事实引起的:stdout窗口模式下的应用程序是固定大小的缓冲区。 所以,如果您有写信给stdout,或者与print or sys.stdout直接,一段时间后您会看到这些错误。

您可以通过以下方式修复此问题:

  1. 删除/注释掉有关的文字stdout
  2. Using logging而不是打印到标准输出
  3. 重定向stdout在应用程序执行开始时。这是需要更改较少代码的解决方案,尽管我认为将调试语句移至logging将是更好的选择。

重定向stdout你可以使用这种代码:

import sys
import tempfile
sys.stdout = tempfile.TemporaryFile()
sys.stderr = tempfile.TemporaryFile()

就在执行程序之前。您还可以使用一些自定义对象将输出放入“日志”文件或其他文件中,重要的是输出不应填充固定大小的缓冲区。

例如,您可以执行类似的操作来利用logging模块无需更改太多代码:

import sys
import logging

debug_logger = logging.getLogger('debug')
debug_logger.write = debug_logger.debug    #consider all prints as debug information
debug_logger.flush = lambda: None   # this may be called when printing
#debug_logger.setLevel(logging.DEBUG)      #activate debug logger output
sys.stdout = debug_logger

这种方法的缺点是print执行更多调用stdout.write对于每行:

>>> print 'test'
DEBUG:debug:test
DEBUG:debug:

如果你愿意,你可能可以避免这种行为,编写一个真正的write调用的函数the_logger.debug只有“全线”。

无论如何,我认为这些解决方案应该只是暂时的,并且仅在移植之前使用prints 呼叫logging.debug.

(显然,记录器应该写入文件而不是stdout以避免错误。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyInstaller 打包的应用程序在控制台模式下工作正常,在窗口模式下崩溃 的相关文章

  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 如何使用 Electron 运行和打包外部可执行文件?

    例如 我有一个编译好的二进制文件cudaDeviceQuery它以 JSON 形式返回设备列表 这是一段代码 export default function cudaDeviceQuery Promise
  • Laravel 对所有页面进行身份验证检查

    我已经创建了身份验证 并且它运行良好 但检查内页时存在一些问题 例如 Route get array before gt auth do gt function return View make home index 索引页面仅对登录用户可
  • 从手机号码中提取国家代码

    我有一个带有国家 地区代码的手机号码列表 例如 919638095998 号码 我已经提到了libphonenumber 谷歌示例另外 首先我们需要传递国家 地区 2 位数代码 我最初不知道 那么我怎么知道这个号码来自哪个国家呢 我还得到了
  • CouchDB读取授权

    在couchdb网站 gt 技术概述 gt 安全性和验证 http couchdb apache org docs overview html 它写道 在读者访问 部分 为了保护文档内容 CouchDB文档可以有一个读者列表 这是允许阅读文
  • Angular ui-router 完成条件视图

    我正在问一个与这个问题类似的问题 UI 路由器条件 ui 视图 但我的情况有点复杂 我似乎无法得到所提供的工作答案 基本上 我有一个 url 可以用两种截然不同的方式呈现 具体取决于 url 指向的实体类型 这是我目前正在尝试的 state
  • 鼠标中键按下并移动事件

    是什么控制事件鼠标中键按下并移动 也就是说 当我按住鼠标中键并移动鼠标时 我可以订阅什么事件 看一下 Control MouseDown 事件 鼠标按钮枚举 在 C 中检测鼠标按钮事件 你也可以尝试这样的事情 private void Fo
  • 使用 Redis 的 Mule 缓存策略

    我正在寻找一种在两台服务器之间共享缓存的方法 并且正在研究使用 Redis 作为对象存储缓存策略 但在读取存储值时遇到问题 当缓存命中为未命中值时 它会成功存储值 但在检索该值时会抛出错误 所需的对象 属性 muleContext 为 nu
  • 如何在 ext 4 中制作完整的模式窗口?

    就像微软操作系统 xp vista 7 等 中的窗口一样 如果主窗口创建模态窗口 则用户无法访问主窗口 包括关闭和访问工具栏等 我想用 extjs 做一个类似的 这是我的模态示例 Ext create Ext Window title aa
  • 类型存在于 2 个程序集中

    我从两个不同的第三方 COM DLL 创建了两个 NET Interop 程序集 这两个 COM DLL 都包含一个名为COMMONTYPE 所以 COMMONTYPE现在也通过两个互操作程序集公开 我有第三个项目需要使用这两个互操作程序集
  • jce 无法验证提供者 bc

    我开发了一个应用程序 在 BountyCastle jar 的帮助下使用了密码学 我还有一行 Security addProvider new org bouncycastle jce provider BouncyCastleProvid
  • 在两个无序字符向量之间执行非成对的全部比较 --- intersect 的相反 --- 全部到全部 setdiff

    示例数据 v1 lt c E82391 X2329323 C239923 E1211 N23932 F93249232 X93201 X9023111 O92311 9000F K9232932 L9232932 X02311111 v2
  • Object类如何实现clone()方法

    在一本关于 Core Java 的书中 我发现了这样的摘录 想想以何种方式 对象类可以实现克隆 它 对物体一无所知 所以它只能逐个字段 复制 如果对象中的所有数据字段 是数字或其他基本类型 复制字段就可以了 但 如果该对象包含对 子对象 然
  • 在调用超类构造函数之前验证构造函数的参数

    例如 这样的构造函数 public class Car extends Vehicle public Car Car a super a getName what if a is null 在调用 super 之前我无法检查参数的条件 在这
  • 用自定义的任务计划程序替换 C# 中的任务计划程序

    我想知道是否可以使用 C 更改将任务映射到 NET 中真实操作系统线程的任务调度程序 或者是否需要重新编译 Mono 运行时来执行此操作 谢谢 系统 线程 任务 如果您参考系统 线程 任务那么你需要的是子类化任务调度器然后你可以使用你的类的
  • 参数类型“customClass.Type”不符合预期类型“NSItemProviderWriting”

    iOS 11 x 斯威夫特 4 尝试实现自定义类以使用新的拖放协议 并且需要一些超级编码器的帮助 我创建了这个类 import UIKit import MobileCoreServices class CustomClass NSObje
  • PHP 的 mail():有哪些需要注意的潜在问题?

    给定接受自定义用户输入 例如地址 主题行 消息 的联系表单 需要注意哪些安全隐患和 陷阱 至少 必须验证用户的电子邮件地址 可能使用 filter var 或等效函数 根据我的阅读 这还应该防止将额外的标头注入到脚本中 那么主题行和消息内容
  • angular-cli工具的--base-href和--deploy-url参数有什么区别

    Angular 的文档告诉我们应该使用 base href当要部署在子文件夹中时 Angular 应用程序构建用于生产时的参数 如果将文件复制到服务器子文件夹中 请附加构建标志 base href并设置适当地 例如 如果index html
  • golang 中 C++ 的“using”等价物是什么

    什么是C using some namespace objectgolang 中的等价物 根据问题here我可以得到using namespace common附有以下声明 import common 但这会导入整个命名空间 现在我只想使用
  • force_ssl 在 Rails 中做什么?

    在之前的一个question我发现我应该设置 nginx ssl 终止并且不让 Rails 处理加密数据 那么为什么会出现下面的情况呢 config force ssl true 我在生产配置文件中看到这一点被注释掉了 但是 如果期望 ng
  • PyInstaller 打包的应用程序在控制台模式下工作正常,在窗口模式下崩溃

    我正在使用 Python 和 PySide 构建一个相当复杂的应用程序 发布的日子终于临近了 所以我想将此应用程序构建为 exe 然而 我手上有一个奇怪的问题 我过去使用过 PyInstaller 顺便说一下 使用版本 2 但从未发生过这种