Erreur lors de la compilation de pyqt4 avec Pyinstaller
-
14-11-2019 - |
Question
Dans le passé, j'ai utilisé PyCompiler (ou «Pyinstaller») pour compiler mes programmes qui utilisent le framework PYQT4 en code exécutable, simplement parce que Py2EXE.
J'ai changé d'ordinateur récemment et je n'ai pas encore réussi à compiler mes programmes PYQT4 dessus!
Dans cet ordinateur, j'ai défini une variable d'environnement% pycompile% qui a le répertoire du fichier pyinstaller.py.
Voici le code que je branche sur le cmd.exe, qui fonctionne avec le code python et non importe Pyqt4.
python %pycompile% --noconsole myscript.pyw
Cependant, lorsque j'essaie de compiler mon programme basé sur PYQT4, j'obtiens une erreur de syntaxe qui provient (par mon interprétation) à l'intérieur d'un fichier Python importé par pyinstaller.py lorsque vous essayez de compiler les programmes PYQT4. "exec_ = exec"
E:\ChemCalc ULTIMATE\ChemCalc ULTIMATE>python %pycompile% Penny.pyw
I: skip Configure.py, use existing config C:\Python27\PyCompile\config.dat
wrote E:\ChemCalc ULTIMATE\ChemCalc ULTIMATE\Penny.spec
I: Dependent assemblies of C:\Python27\python.exe:
I: x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none
checking Analysis
building Analysis because outAnalysis0.toc non existent
running Analysis outAnalysis0.toc
Analyzing: C:\Python27\PyCompile\support\_mountzlib.py
Analyzing: C:\Python27\PyCompile\support\useUnicode.py
Analyzing: Penny.pyw
Syntax error in exec_py3.py
('invalid syntax', ('exec_py3.py', 1, 12, 'exec_ = exec\n'))
Traceback (most recent call last):
File "C:\Python27\PyCompile\pyinstaller.py", line 187, in <module>
main(parser)
File "C:\Python27\PyCompile\pyinstaller.py", line 76, in main
run_build(opts, args, spec_file)
File "C:\Python27\PyCompile\pyinstaller.py", line 52, in run_build
Build.main(spec_file, configfilename=opts.configfile)
File "C:\Python27\PyCompile\Build.py", line 1472, in main
build(specfile)
File "C:\Python27\PyCompile\Build.py", line 1429, in build
execfile(spec)
File "E:\ChemCalc ULTIMATE\ChemCalc ULTIMATE\Penny.spec", line 3, in <module>
pathex=['E:\\ChemCalc ULTIMATE\\ChemCalc ULTIMATE'])
File "C:\Python27\PyCompile\Build.py", line 347, in __init__
self.__postinit__()
File "C:\Python27\PyCompile\Build.py", line 298, in __postinit__
self.assemble()
File "C:\Python27\PyCompile\Build.py", line 416, in assemble
analyzer.analyze_script(script)
File "C:\Python27\PyCompile\mf.py", line 572, in analyze_script
return self.analyze_r('__main__')
File "C:\Python27\PyCompile\mf.py", line 466, in analyze_r
newnms = self.analyze_one(name, nm, imptyp, level)
File "C:\Python27\PyCompile\mf.py", line 525, in analyze_one
mod = self.doimport(nm, ctx, fqname)
File "C:\Python27\PyCompile\mf.py", line 587, in doimport
mod = parent.doimport(nm)
File "C:\Python27\PyCompile\mf.py", line 761, in doimport
mod = self.subimporter.getmod(nm)
File "C:\Python27\PyCompile\mf.py", line 355, in getmod
mod = owner.getmod(nm)
File "C:\Python27\PyCompile\mf.py", line 117, in getmod
co = compile(string.replace(stuff, "\r\n", "\n"), py[0], 'exec')
File "exec_py3.py", line 1
exec_ = exec
^
SyntaxError: invalid syntax
J'utilise la même construction (216) de PyCompile que j'avais l'habitude sur mon ancien ordinateur. Ils exécutent tous les deux des fenêtres 32 bits avec Python 2.7.2 32 bits.
Toutes les aides voulaient!
(Je panique que mon projet de programmation massif ne peut pas être compilé!)
J'ai lu plusieurs questions de pile sur les erreurs de Pyinstaller avec PYQT, mais pas mon erreur particulière!
Merci!
Mon code commence par:
import sys
import getpass
import hmac
import random
import shutil
from PyQt4 import QtGui, QtCore
from RegMenu import Ui_RegristrationMenu
from ChemWindow import Ui_ChemWindow
from ReactionClass import ReactionElement
from StoichUnitSelectionClass import Ui_StoichUnitSelection
from VisualTool import Ui_Aesthetics_Tool
import decimal
import sympy
import math
Et se termine par:
sys.exit(ApplicationRun.exec_())
Python 2.7.2 (32 bits)
Build PyCompile (216)
Pyqt4 (4.5)
Windows 7 (32 bits)
La solution
Fixé comme par la suggestion partagée d'Avaris.
http://code.google.com/p/mpmath/issues/detail?id=204
Autres conseils
Il semble que Pyinstaller utilise Python 3 parce que exec_ = exec
est légal uniquement dans Python 3 et également exec_py3.py est dans le traceback. Essayez de donner une option à Pyinstaller pour lui dire d'utiliser Python 2.7.