pyinstaller creando EXE RuntimeError: se excedió la profundidad máxima de recursión al llamar a un objeto Python

Estoy ejecutando WinPython 3.4.4.3 con pyinstaller 3.2 (obtenido a través de pip install pyinstaller).

Ahora tengo un código Qt4 realmente simple que quiero convertir a EXE y tengo un problema que no puedo resolver.

El código:

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

Intento ejecutar pyinstaller file_name.py y pyinstaller file_name.py :

 RuntimeError: maximum recursion depth exceeded while calling a Python object 

Ahora si hay algunas cosas que he descubierto que también afectan el problema:

1) Si comento esta línea: from scipy.interpolate import InterpolatedUnivariateSpline

2) La creación de un archivo EXE desde otro script diferente que usa Scipy.Interpolate (RBS, pero aún así) – funciona como un encanto.

3) Si trato de convertirlo a EXE usando WinPython 3.5.1.1 + pyinstaller obtenido de la misma manera, y es la misma versión 3.2, no genera problemas con mi archivo exe.

Quiero entender qué está causando el error en el caso original y desafortunadamente no puedo encontrar ninguna respuesta en google, aunque la mayoría de las soluciones que pude encontrar estaban relacionadas con matplotlib y no con interpolación.

Mustafa me guió en la dirección correcta, tienes que boost el límite de recursión. Pero el código debe ponerse al principio del archivo de especificaciones y no en su código de python:

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

pyi-makespec el archivo de especificaciones con pyi-makespec , pyi-makespec y luego compile pasando el archivo de especificaciones al comando pyinstaller . Consulte el manual de pyinstaller para obtener más información sobre el uso de archivos de especificaciones .

Por favor, asegúrese de usar pyinstaller 3.2.0, con 3.2.1 obtendrá ImportError: cannot import name 'is_module_satisfies' (vea el problema en GitHub)

Esto funciono para mi

  1. Ejecute pyinstaller y deténgalo para generar el archivo de especificaciones:

     pyinstaller filename.py 

    Debe generarse un archivo con .spec como extensión

  2. Ahora agregue las siguientes líneas al principio del archivo de especificaciones:

     import sys sys.setrecursionlimit(5000) 
  3. Ahora ejecuta el archivo de especificaciones usando:

     pyinstaller filename.spec 

Intentaría boost el límite de profundidad de recursión. Inserte al comienzo de su archivo:

 import sys sys.setrecursionlimit(5000)