使用py2exe打包py文件时出现“超过最大递归深度”的错误提示。

5

几个月前,py2exe在相同的py文件上运行得非常好。 但是今天我再次尝试时,它报告了“RuntimeError:maximum recursion depth exceeded”,并且结果是获得一个空的“dist”文件夹。

Py文件正常工作,只是无法打包。 我猜测py文件中导入的模块有问题。 但我不能确定具体情况。 是否有人知道解决方法?

我的py文件的开头部分如下:

import xlrd
import wx
import wx.lib.filebrowsebutton as filebrowse
from scipy.optimize import fsolve
import math
import threading
from sympy import Symbol
from sympy import solve

以下是cmd窗口的最后几行:

File "D:\Python27\lib\site-packages\py2exe\mf.py", line 332, in _safe_import_hook
self.import_hook(name, caller, level=level)
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 719, in import_hook
return Base.import_hook(self,name,caller,fromlist,level)
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 137, in import_hook
m = self.load_tail(q, tail)
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 214, in load_tail
m = self.import_module(head, mname, m)
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 724, in import_module
r = Base.import_module(self,partnam,fqname,parent)
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 284, in import_module
m = self.load_module(fqname, fp, pathname, stuff)
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 730, in load_module
r = Base.load_module(self, fqname, fp, pathname, (suffix, mode, typ))
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 314, in load_module
self.scan_code(co, m)
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 423, in scan_code
self._safe_import_hook(name, m, fromlist, level=level)
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 332, in _safe_import_hook
self.import_hook(name, caller, level=level)
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 719, in import_hook
return Base.import_hook(self,name,caller,fromlist,level)
File "D:\Python27\lib\site-packages\py2exe\mf.py", line 134, in import_hook
self.msg(3, "import_hook", name, caller, fromlist, level)
RuntimeError: maximum recursion depth exceeded

D:\Python27\py2exetemp>pause
3个回答

14

我会尝试增加递归深度限制。请在您的文件开头插入以下代码:

import sys
sys.setrecursionlimit(5000)

0

这个错误也可能发生在您安装了Jason path.py,如此处所述:http://www.py2exe.org/index.cgi/PathModul。该页面提供的解决方案是

Just rename

site-packages/path.py to

site-packages/jpath.py 

and make sure also to toggle your imports to

import jpath

0

它适用于Pyinstaller

创建一个spec文件

pyi-makespec options name.py 

通过在文件开头添加内容修改此规范

import sys
sys.setrecursionlimit(5000) # or more

生成可执行文件

pyi options name.spec 

3
这个问题是关于py2exe而不是pyInstaller的。这个回答离题了。 - master_gibber
@master_gibber,这个问题对于PyInstaller和py2exe来说有相同的解决方案。因为这两个工具是替代品,所以我认为最好在这里发布它,而不是创建一个新的问题和答案。 - Kirill Dolmatov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接