Probleme beim Kompilieren von Python3 und Pyqt4 mit cx_freeze
-
13-12-2019 - |
Frage
Ich versuche, mit cx_Freeze ein einfaches Skript zu kompilieren, das ich mit Python3 und PyQt4 geschrieben habe, aber ich habe drei Probleme, die ich einfach nicht lösen kann.
Die Symbole werden nicht angezeigt.Ich verwende dafür eine kompilierte Ressourcendatei, d.h.Ich habe eine .py-Datei importiert, die die Ressourcen enthält, und ich habe versucht, dem Rat zu folgen Hier, Ich kopiere den Ordner „imageformats“ in meinen Projektordner, aber nichts scheint zu funktionieren.
Ich verwende nicht mehrere Python-Module, einschließlich tcl und ttk, also habe ich sie dem hinzugefügt
excludes
Möglichkeit.Sie scheinen jedoch immer noch hinzugefügt zu werden.Wenn ich versuche, mit zu kompilieren
base='Win32GUI'
Das Ausführen der erstellten Exe löst eine Ausnahme aus:'NoneType' has no attribute 'encoding'
Ich bin mir ziemlich sicher, dass mit meinem Setup-Skript einfach etwas nicht stimmt, da die cx_Freeze-Dokumentation nicht sehr ausführlich ist. Ich hoffe also, dass jemand auf das Problem hinweisen kann.Hier ist das Setup-Skript.Ich werde das Skript, das ich kompiliere, nicht veröffentlichen, da es ziemlich lang ist, aber wenn es nötig ist, werde ich versuchen, eine prägnante Version zum Testen zu erstellen.
from cx_Freeze import setup, Executable
exe = Executable(
script='cconvert.py',
base='Win32GUI'
)
options = dict(
excludes=['curses', 'email', 'tcl', 'ttk']
)
setup(
name="Coord Convertor",
version="0.1",
description="A Coordinate converter from DMS to DD",
requires=['pyqt4 (>=4.8)', 'dtlibs (>=0.4.1)'],
data_files=['imageformats'],
executables=[exe],
options={'build-exe': options}
)
Lösung
(Beachten Sie unbedingt 1.)
2:In options={'build-exe'... muss es meiner Meinung nach build_exe sein (Unterstrich statt Bindestrich).
3:Versuchen Sie, auf etwas wie zuzugreifen sys.stdout.encoding
überall? sys.stdout
wird None sein, wenn Sie die Win32GUI-Basis verwenden.Sogar ein print()
Ein Anruf könnte das auslösen.
Andere Tipps
Gelöst.Zusätzlich zu den Hinweisen von Thomas musste ich in den Optionen „imageformats“ unter „include-files“ und nicht unter „data_files“ finden.Mein endgültiges Skript sieht so aus:
from cx_Freeze import setup, Executable
exe = Executable(
script='cconvert.pyw',
base='Win32GUI'
)
options = dict(
excludes=['curses', 'email', 'tcl', 'ttk', 'tkinter'],
include_files=['imageformats']
)
setup(
name="Coord Convertor",
version="0.1",
description="A Coordinate converter from DMS to DD",
requires=['pyqt4 (>=4.8)', 'dtlibs (>=0.4.1)'],
executables=[exe],
options={'build_exe': options}
)