首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >pyinstaller创建EXE RuntimeError:调用Python对象时超出了最大递归深度

pyinstaller创建EXE RuntimeError:调用Python对象时超出了最大递归深度
EN

Stack Overflow用户
提问于 2016-08-16 22:44:00
回答 9查看 54.9K关注 0票数 38

我正在使用pyinstaller 3.2运行WinPython 3.4.4.3 (通过pip install pyinstaller获得)。

现在我有一些非常简单的Qt4代码,我想要转换成可执行文件,但我遇到了无法解决的问题。

代码:

代码语言:javascript
复制
import sys
import math
from PyQt4 import QtGui, QtCore 
import SMui
import numpy as np
from scipy.interpolate import InterpolatedUnivariateSpline

class SomeCalculation(QtGui.QMainWindow, SMui.Ui_MainWindow):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setupUi(self)
        self.setWindowTitle('Some Calculation')
        self.calculate.clicked.connect(self.some_math)

    def some_math(self):
        a_diameter=self.a_diameter.value()
        b_diameter=self.b_diameter.value()
        complement=self.complement.value()
        angle=self.angle.value()
        preload=self.preload.value()

### ONLY MATH HAPPENS HERE also defining X and Y ####

        interpolator = InterpolatedUnivariateSpline(X, Y)

### MORE MATH HAPPENS HERE ####

        self.axial.setText(str(axial))
        self.radial.setText(str(radial))

def main():
    app = QtGui.QApplication(sys.argv)
    window=SomeCalculation()
    window.show()
    app.exec_()

if __name__=='__main__':
    main()

我尝试运行pyinstaller file_name.py,得到的结果是:

代码语言:javascript
复制
RuntimeError: maximum recursion depth exceeded while calling a Python object

现在,如果我发现了一些也会影响问题的事情:

1)如果我注释掉这一行:from scipy.interpolate import InterpolatedUnivariateSpline

2)从另一个使用Scipy.Interpolate的不同脚本创建EXE文件(RBS,但仍然是)-工作起来像一个护身符。

3)如果我尝试使用WinPython 3.5.1.1 + pyinstaller将其转换为可执行文件,并以相同的方式获得,并且它是它的3.2版本-它生成可执行文件没有问题。

我想知道是什么导致了原始案例中的错误,但我在谷歌上找不到任何答案。不幸的是,我能找到的大多数修复都与matplotlib有关,而不是插值。

EN

回答 9

Stack Overflow用户

发布于 2018-07-10 05:07:07

这对我很有效

  1. 运行pyinstaller并停止它以生成spec文件:

pyinstaller filename.py

应生成扩展名为.spec的文件

  • 现在将以下行添加到等级库文件的开头:

导入sys sys.setrecursionlimit(5000)

  • Now使用以下命令运行规范文件:

pyinstaller filename.spec

票数 81
EN

Stack Overflow用户

发布于 2017-02-23 23:13:54

Mustafa确实指引我到了正确的方向,你必须增加递归限制。但是代码必须放在spec文件的开头,而不是放在python代码中:

代码语言:javascript
复制
# -*- mode: python -*-
import sys
sys.setrecursionlimit(5000)

首先使用pyi-makespec创建等级库文件,对其进行编辑,然后通过将等级库文件传递给pyinstaller命令进行构建。有关using spec files的更多信息,请参阅pyinstaller手册。

请确保使用pyinstaller 3.2.0,使用3.2.1你会得到ImportError: cannot import name 'is_module_satisfies' (参见GitHub上的issue )。

票数 33
EN

Stack Overflow用户

发布于 2016-08-16 22:46:44

我会尝试增加递归深度限制。在文件开头插入:

代码语言:javascript
复制
import sys
sys.setrecursionlimit(5000)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38977929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档