Pyinstaller打包中的递归问题

=============================================================
A RecursionError (maximum recursion depth exceeded) occurred.
For working around please follow these instructions
=============================================================

  1. In your program’s .spec file add this line near the top::

    import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)

  2. Build your program by running PyInstaller with the .spec file as argument::

    pyinstaller myprog.spec

  3. If this fails, you most probably hit an endless recursion in PyInstaller. Please try to track this down has far as possible,
    create a minimal example so we can reproduce and open an issue at
    https://github.com/pyinstaller/pyinstaller/issues following the
    instructions in the issue template. Many thanks.

Explanation: Python’s stack-limit is a safety-belt against endless
recursion, eating up memory. PyInstaller imports modules recursively.
If the structure how modules are imported within your program is
awkward, this leads to the nesting being too deep and hitting Python’s
stack-limit.

With the default recursion limit (1000), the recursion error occurs at
about 115 nested imported, with limit 2000 at about 240, with limit
5000 at about 660

解决方案

该报错是递归深度超过了最大限制所引起的。Python限制了递归调用的最大深度,以防止无限递归导致堆栈溢出。当一个程序中的递归调用层数过多时,会触发RecursionError异常,提示"maximum recursion depth exceeded"。

在报错信息中,提供了一个解决方案,以及说明了为什么可能会出现这个问题:

  1. 解决方案: 为了解决这个问题,报错信息中提到可以在程序的 .spec 文件中添加一行代码来增加递归限制。代码如下:

    import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)
    

    这会将递归深度限制增加到当前限制的5倍。这样做的目的是为了防止因为PyInstaller在递归导入模块时导致的递归深度问题。

  2. 构建程序: 接下来,可以使用修改后的 .spec 文件运行 PyInstaller 来构建您的程序:

    pyinstaller myprog.spec
    

    myprog.spec 替换为您的 spec 文件的实际文件名。

  3. 问题追踪: 如果上述步骤仍然失败,可能是因为程序中存在无限递归。可以尝试追踪这个问题,创建一个最小化的示例代码,以便在 https://github.com/pyinstaller/pyinstaller/issues 提交一个问题报告,以获得更多帮助。

总之,这个问题的根本原因在于程序中的递归调用层数过多,可能是因为模块的导入结构不当,导致递归嵌套太深,从而触发了 Python 的递归深度限制。采取上述解决方案,可以尝试增加递归深度限制,以便 PyInstaller 在递归导入模块时不会导致堆栈溢出。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值