【问题标题】:Pyinstaller - exe doing other things than Python scriptsPyinstaller - 执行 Python 脚本以外的其他事情的 exe
【发布时间】:2014-07-10 16:15:53
【问题描述】:

我的 pyinstaller 和我的程序有问题。如果我启动我的脚本,一切运行正常,但如果我运行 exe,它会做一些奇怪的事情。

这段代码应该在显示一个框架时做一些事情,如果它完成了框架应该销毁。但是在exe中它不会创建任何东西,但是在一段时间后创建第二个主框架(在这个脚本中没有创建主框架,这只是在wxpython应用程序中发生)。 这是创建框架的代码:

# self is a wx.Frame
def handleInputs(self):
    path = self.setSavePath() # setSavePath just takes a path from a fileDialog
    if path:
        self.dialog = WaitingDialog() # subclass of wx.MiniFrame
        self.dialog.Show(True)
        calcThread = threading.Thread(target=self.doStuff)
        checkThread = threading.Thread(target=self.checkFinishing)
        calcThread.start()
        checkThread.start()
        self.Disable()

def checkFinishing(self, thread):
    while thread.is_alive():
        pass
    wx.CallAfter(self.closeFrame)
    return True

def doStuff(self):
    # do Stuff here
    return True

def closeFrame(self):
    self.dialog.Destroy()
    self.Destroy()

所以,self.handleInputs() 被调用了,但是在应用程序中,doStuff() 中似乎没有做任何事情,然后创建了一个新的主框架。 您是否看到任何错误或知道为什么会发生这种情况?

【问题讨论】:

  • 有关您如何使用 pyinstaller 的信息会有所帮助,一个 SSSCE (sscce.org) 也可以证明该问题。就目前而言,我无法使用您提供的内容重现您的行为。
  • 另外,您是否在应用程序中的任何位置进行多处理?是否应该在 if __name__ == '__main__' 块下的东西没有正确缩进? PyInstaller 的两次执行可能会产生奇怪的行为。
  • 谢谢,现在解决了,问题是多处理。我现在删除了所有进程并使用线程,但现在它有点慢。对不起,如果我的例子有点不具体,昨天为时已晚:(下次我会记住它
  • 现在找到了这个解决方案:pyinstaller.org/wiki/Recipe/Multiprocessing,但它比使用线程慢得多
  • 我个人使用 py2exe 比使用 pyinstaller 运气好得多。 pyinstaller 中的两遍执行会降低性能,尤其是对于小型、快速运行的脚本。

标签: python multithreading wxpython pyinstaller


【解决方案1】:

现在解决了,删除了多处理的所有用途。

【讨论】:

    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多