首页 > 解决方案 > Py2exe - PyOpenSSL 错误:超出最大递归深度

问题描述

我有点困惑:我正在使用 Python 3.4 和 py2exe 将程序编译为供另一个人使用的独立程序。我通过 pip 安装了 PyOpenSSL 包,但我没有在程序中使用它。当我在安装 PyOpenSSL 后尝试编译程序时出现maximum recursion depth exceeded in comparison错误。一旦我取消安装 PyOpenSSL 包,错误就消失了。我怎样才能解决这个问题?我知道 Python 3.4 已经过时了。我很快就会迁移到 Python 3.6。

标签: python-3.4py2exe

解决方案


当我们进入递归时,存在堆栈溢出的风险,并且在底层工作的 Cpython 不会自行优化尾递归,所以如果你走得太深,你会更接近堆栈溢出。通常不同的 Cpython/python 风格具有不同的递归许可深度,因此当您使用 PyOpenSSL 时,它会将 sys.setrecursionlimit 更改(覆盖)到更低的值,因此您可以增长的 python 堆栈变得更加受限。

您可以在这里阅读更多内容以及如何更改它(不推荐)。https://docs.python.org/3/library/sys.html#sys.setrecursionlimit

如果可能的话,如果你用迭代版本替换它会更好,Python stackframe 往往会变得非常巨大,这对于内存管理例程来说没有乐趣。

希望有帮助。


推荐阅读