pyinstaller creating EXE RuntimeError: maximum recursion depth exceeded while calling a Python object

家住魔仙堡 提交于 2019-11-26 19:24:44

问题


I am running WinPython 3.4.4.3 with pyinstaller 3.2 (obtained via pip install pyinstaller).

Now I've got some really simple Qt4 code that I want to convert to EXE and I've run into problem that I cannot solve.

The Code:

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()

I try to run pyinstaller file_name.py and I'm getting:

RuntimeError: maximum recursion depth exceeded while calling a Python object

Now if there's a few things that I have found out that also affect the issue:

1) If I comment out this line: from scipy.interpolate import InterpolatedUnivariateSpline

2) Creating EXE file from another different script that uses Scipy.Interpolate (RBS, but still) - works like a charm.

3) If I try to convert it to EXE using WinPython 3.5.1.1 + pyinstaller obtained the same way, and it's the same 3.2 version of it - it generates my exe file no problems.

I want to understand what's causing the error in the original case and I cannot find any answer on google unfortunately, most of the fixes I could find were related with matplotlib and not interpolation though.


回答1:


This worked for me

  1. Run pyinstaller and stop it to generate the spec file :

    pyinstaller filename.py
    

    A file with .spec as extension should be generated

  2. Now add the following lines to the beginning of the spec file :

    import sys
    sys.setrecursionlimit(5000)
    
  3. Now run the spec file using :

    pyinstaller filename.spec
    



回答2:


Mustafa did guide me to the right direction, you have to increase the recursion limit. But the code has to be put to the beginning of the spec file and not in your python code:

# -*- mode: python -*-
import sys
sys.setrecursionlimit(5000)

Create the spec file with pyi-makespec first, edit it and then build by passing the spec file to the pyinstaller command. See the pyinstaller manual for more information about using spec files.

Please make sure to use pyinstaller 3.2.0, with 3.2.1 you will get ImportError: cannot import name 'is_module_satisfies' (see the issue on GitHub)




回答3:


i'd try to increase recursion depth limit. Insert at the beginning of your file:

import sys
sys.setrecursionlimit(5000)



回答4:


You can make changes to the recursion limit in the following manner:

import sys
sys.setrecursionlimit(1000)


来源:https://stackoverflow.com/questions/38977929/pyinstaller-creating-exe-runtimeerror-maximum-recursion-depth-exceeded-while-ca

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!