python-3.4 - Py2exe - PyOpenSSL 错误:超出最大递归深度
问题描述
我有点困惑:我正在使用 Python 3.4 和 py2exe 将程序编译为供另一个人使用的独立程序。我通过 pip 安装了 PyOpenSSL 包,但我没有在程序中使用它。当我在安装 PyOpenSSL 后尝试编译程序时出现maximum recursion depth exceeded in comparison
错误。一旦我取消安装 PyOpenSSL 包,错误就消失了。我怎样才能解决这个问题?我知道 Python 3.4 已经过时了。我很快就会迁移到 Python 3.6。
解决方案
当我们进入递归时,存在堆栈溢出的风险,并且在底层工作的 Cpython 不会自行优化尾递归,所以如果你走得太深,你会更接近堆栈溢出。通常不同的 Cpython/python 风格具有不同的递归许可深度,因此当您使用 PyOpenSSL 时,它会将 sys.setrecursionlimit 更改(覆盖)到更低的值,因此您可以增长的 python 堆栈变得更加受限。
您可以在这里阅读更多内容以及如何更改它(不推荐)。https://docs.python.org/3/library/sys.html#sys.setrecursionlimit
如果可能的话,如果你用迭代版本替换它会更好,Python stackframe 往往会变得非常巨大,这对于内存管理例程来说没有乐趣。
希望有帮助。
推荐阅读
- python - 为什么 random.choice() 有时不做任何选择?
- javascript - 我有一个包含 2 个文本区域和 1 个文件上传的表单,它触发了一个 ajax 脚本,但是当我 console.log 时,图像中没有显示任何信息
- c - c语言如何将文件内容保存到指针数组中?
- c++ - 如何创建居中的 GLFW 窗口?
- python - 在Python上按关键字对txt中的行进行排序
- c++ - unsigned long 和 DWORD 之间的区别?
- java - 如何使用 C++ API 在颤振中获取蓝牙设备列表
- rust - 两次借用可变变量的递归异步函数
- r - 使用 curly curly {{}} 语法时,dplyr 连接代码功能失败
- python - 烧瓶数据库迁移中的名称错误 - 未定义表