Sonntag, Juni 7, 2020

pyinstaller erstellen von EXE-Absturz mit Laufzeitfehler: maximale Rekursionstiefe überschritten, solange der Aufruf einer Python-Objekt

Ich bin mit WinPython 3.4.4.3 mit pyinstaller 3.2 (abgerufen via pip installieren pyinstaller).

Nun habe ich hier einige wirklich einfache Qt4-code möchte ich umwandeln in EXE und ich habe in problem welches ich nicht lösen kann.

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

Ich versuche zu laufen pyinstaller file_name.py und ich bin immer:

RuntimeError: maximum recursion depth exceeded while calling a Python object

Nun, wenn es gibt ein paar Dinge, die ich herausgefunden habe, die sich auch auf die Frage:

1) Wenn ich diese Zeile auskommentieren: from scipy.interpolate import InterpolatedUnivariateSpline

2) Erstellen EXE-Datei aus einen anderen script verwendet Scipy.Interpolieren (RBS, aber immer noch) – funktioniert wie ein Charme.

3) Wenn ich versuche es zu konvertieren in EXE mit WinPython 3.5.1.1 + pyinstaller erhalten die gleiche Weise, und es ist die gleiche version 3.2 und es erzeugt meiner exe-Datei keine Probleme.

Ich möchte verstehen, was verursacht die Fehler, die in der ursprünglichen Fall und ich finde keine Antwort bei google leider, die meisten fixes ich finden konnte waren im Zusammenhang mit matplotlib und keine interpolation wenn.

Hast du jemals das gelöst?

InformationsquelleAutor H_Four | 2016-08-16

3 Kommentare

  1. 20

    Mustafa lenkte mich in die richtige Richtung, erhöhen Sie die Rekursion begrenzen. Aber der code wird an den Anfang der spec-Datei und nicht in Ihrer python-code:

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

    Erstellung der spec-Datei mit pyi-makespec ersten, Bearbeiten es und erstellen Sie dann durch die übergabe der spec-Datei, um die pyinstaller Befehl. Finden Sie die pyinstaller-Handbuch für weitere Informationen über mit spec-Dateien.

    Bitte stellen Sie sicher, dass Sie pyinstaller 3.2.0, 3.2.1, erhalten Sie ImportError: cannot import name 'is_module_satisfies' (siehe Problem auf GitHub)

    InformationsquelleAutor urxter

  2. 17

    Dieser arbeitete für mich

    1. Laufen pyinstaller und verhindern, dass es zu generieren, die spec-Datei :

      pyinstaller filename.py

      Einer Datei mit .spec als Erweiterung generiert werden soll

    2. Nun fügen Sie die folgenden Zeilen an den Anfang der spec-Datei :

      import sys
      sys.setrecursionlimit(5000)
    3. Führen Sie nun die spec-Datei verwenden :

      pyinstaller filename.spec
    Frage mich warum die Macher von pyinstaller nicht geben recursionlimit als commnad-line-option. Oder zumindest erwähnen, das problem ist in der FAQ irgendwo.

    InformationsquelleAutor Aviral

  3. 4

    ich würde versuchen zu steigern Rekursionstiefe einschränken. Legen Sie am Anfang der Datei:

    import sys
    sys.setrecursionlimit(5000)
    Tat. Helfen tut es nicht.
    Dies scheint zu helfen, für mich, keine Ahnung warum? Hast du einen pointer?

    InformationsquelleAutor Mustafa Gondalwala

Kostenlose Online-Tests