Hallo zusammen,
und täglich grüßt das Murmeltier.
Ich habe mal wieder ein Problem und nach erfolgloser Lösungssuche, bitte ich euch um Hilfe.
Der ein oder andere erinnert sich vielleicht noch an mein Python-Programm, das Werte aus einer Excel-Tabelle ausliest. Das habe ich nun erweitert, für eine benutzerfreundliche Bedienung habe ich mit „Qt-Creator“ eine GUI erstellt. Dadurch habe ich eine *.ui-Datei erhalten, welche von meiner „main.py“-Datei eingelesen wird. Unter Fedora mit Qt-Creator und PyCharm funktioniert das reibungslos.
Später, wenn das Programm auch Funktionen hat, soll es allerdings als stand-alone unter Windows 7/10 laufen. Sicherheitshalber habe ich das jetzt mal testen wollen und mich jagt ein Problem nach dem nächsten.
Habe Windows 7 auf VirtualBox installiert und darauf läuft „Anaconda“. Darin rufe ich mit „Pyinstaller –onefile –windowed main.py“ den Befehl auf, eine *.exe -Datei zu erstellen. Das funktioniert erstmal nicht und endet mit der Fehlermeldung:
„maximum recursion depth exceeded“
Der Fehler erscheint wohl öfters. Es wird auf ein Downgrade auf Python 3.5 hingewiesen. Habe ich gemacht, hat nicht geholfen.
Obwohl die Fehlermeldung kommt, wurde eine main.spec – Datei erstellt, in diese habe ich dann „import sys“ und „sys.setrecursionlimit(10**6)“ eingetragen. Mit dem selben Befehl habe ich nochmal pyinstaller aufgerufen und die Fehlermeldung war weg, eine main.exe wurde erstellt.
Die Freude war gleich wieder verschwunden, denn sie lies sich nicht ausführen. Fehlermeldung:
Failed to execute Script
Man sollte wohl Module in die main.spec einfügen, die nicht geladen werden konnten, daraufhin sah meine main.spec so aus:
import sys
sys.setrecursionlimit(10**6)
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['main.py'],
pathex=['C:\\Users\\Dennis\\Documents\\Bachelor exe'],
binaries=[],
datas=[],
hiddenimports=['pandas' , 'os' , 'PySide2' , 'numpy'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False )
Display More
meine main.py so:
#! usr/bin/env python3
import sys
import os
from PySide2.QtWidgets import QApplication, QWidget
from PySide2.QtCore import QFile
from PySide2.QtUiTools import QUiLoader
import pandas as pd
import form
sys.setrecursionlimit(10**6)
# Dateienpfade definieren
FORM_UI_FILENAME = os.path.join(os.path.dirname(__file__), "form.ui")
DATABASE = os.path.join(os.path.dirname(__file__), "Test-Excel.xlsx")
# Datenbank auslesen
producer = list(["Hersteller auswählen", "HerstellerA", "HerstellerB"])
wav_typ_xlsx = pd.read_excel(DATABASE, index_col='Modell')
wav_typ = list(wav_typ_xlsx.index)
rollface_xlsx = pd.read_excel(
DATABASE, sheet_name='Rahmenbedingungen', index_col='Oberfläche')
rollface = list(rollface_xlsx.index)
material_xlsx = pd.read_excel(
DATABASE, sheet_name='Material', index_col='Material')
material = list(material_xlsx.index)
class Form:
# Benutzeroberfläche einlesen und Objekte füllen
def __init__(self, parent=None):
self.widget = QUiLoader().load(FORM_UI_FILENAME, parent)
self.widget.choicebox_material.addItems(material)
self.widget.choicebox_rollface.addItems(rollface)
self.widget.choicebox_wavtyp.addItems(wav_typ)
self.widget.choicebox_producer.addItems(producer)
self.widget.button_cancel.clicked.connect(self.cancel)
# self.widget.button_math.clicked.connect(self.math)
# Berechnungen definieren
def math(self):
pass
# Abbrechen definieren
def cancel(self):
sys.exit()
def main():
app = QApplication([])
form = Form()
form.widget.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Display More
Die Fehlermeldung nach dem öffnen der *.exe ist im Anhang. Sie ist zu lang um sie zu posten.
Hat aber leider nichts gebracht. Habe das Ganze mit Python 3.5/3.6 und 3.7 versucht.
Eventuell muss man irgendwie den PyInstaller noch hinzufügen, zumindest soetwas habe ich gelesen, habe es aber nicht wirklich verstanden.
Habe noch vermutet, das eventuell PySide2 installiert werden muss, das schlug leider fehl, da es nicht gefunden wurde.
Habt ihr noch einen Rat und könnt mit der Fehlermeldung mehr anfangen?
Danke mal wieder!
Grüße
Dennis