PyQT/Windows/Pyinstaller (exe) - NameError: el nombre global 'QtGui' no está definido
Frecuentes
Visto 2,402 equipos
1
Tengo un problema al intentar convertir mi código python en un ejecutable usando pyinstaller. Estoy usando PyQT 4.9.1 y Python 2.7.
Recibo el error cuando intento construirlo (Build.py):
Traceback (most recent call last):
File "Build.py", line 1494, in <module>
main(args[0], configfilename=opts.configfile)
File "Build.py", line 1472, in main
build(specfile)
File "Build.py", line 1429, in build
execfile(spec)
File "c:\projects\vibot\vibotUI_07.py", line 270, in <module>
window = viUI()
File "c:\projects\vibot\vibotUI_07.py", line 9, in __init__
QtGui.QMainWindow.__init__(self)
NameError: global name 'QtGui' is not defined
He buscado en google y todas las soluciones se basan en corregir la importación incorrecta de módulos, pero ya lo hice correctamente para empezar.
Aquí hay una versión recortada de mi código:
#!/usr/bin/env python
import sys
import os
from PyQt4 import QtCore, QtGui
class viUI(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setWindowTitle('test')
self.setObjectName('viMainWindow')
self.resize(400, 600)
self.show()
app = QtGui.QApplication(sys.argv)
window = viUI()
sys.exit(app.exec_())
Este es el archivo Makespec.py:
# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'c:\\projects\\vibot\\vibotUI_07.py'],
pathex=['c:\\Python\\pyinstaller-1.5.1\\pyinstaller-1.5.1'])
pyz = PYZ(a.pure)
exe = EXE( pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'vibotUI_07.exe'),
debug=False,
strip=False,
upx=True,
console=True )
1 Respuestas
1
Me parece que estás llamando a Build.py y pasando tu script como parámetro. Acabo de probar esto para ver qué pasaría y obtuve el mismo resultado que publicaste.
Con el PyInstaller estable actual (1.5.1) necesita crear un archivo de especificaciones primero. En lugar de Build.py, ejecute MakeSpec.py con su secuencia de comandos como argumento. Esto creará un archivo .spec que luego enviará a Build.py.
La documentación muestra las opciones que puede pasar a MakeSpec para cosas como configurar un icono en Windows y configurar las opciones de implementación. Todas estas opciones van en el archivo de especificaciones, por lo que solo necesita volver a llamar a Build.py cuando necesite reconstruir su aplicación.
Respondido el 13 de junio de 12 a las 08:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python pyqt pyinstaller or haz tu propia pregunta.
Estoy usando Makespec.py antes que Build.py, lo siento si omití demasiada información. - VII
¿Está ejecutando Build.py en el archivo .spec que crea Makespec.py? - Gary Hughes
Estoy seguro. Editaré en el archivo Makespec.py, tengo la sensación de que tal vez ingresé algo incorrectamente para que no encuentre el módulo pyqt. - VII
Ahh, leí mal lo que preguntaste, estaba ejecutando la compilación en el archivo python ordinario. Lo siento por eso, mi cerebro ha sido mucho últimamente! Gracias por tu ayuda. - VII