2012-07-04 21 views
5

Utilizando la última pyinstaller en Windows 7 para hacer un EXE independiente (-F), cuando se ejecuta el exe:PyInstaller: ImportError: no se puede importar el nombre QtGui

ImportError: cannot import name QtGui

En el directorio de ganchos PyInstaller existe un manejo especial para PyQt4 aunque no PySide.

Esperando una solución para esto o algo para probar.

Medio Ambiente
Windows 7 64-bit
Python 2.7 32-bit
PYTHONHOME = c: \ python27
PYTHONPATH = c: \ python27 \ lib
pythonlib = c: \ python27 \ libs \ python27.lib; c: \ python27 \ lib \ site-packages

Pasos
1. Añadir PySide de http://releases.qt-project.org/pyside/1.1.1/PySide-1.1.1qt474.win32-py2.7.exe
2. Descomprimir https://github.com/pyinstaller/pyinstaller/zipball/develop en c: \ pyinstaller1.5.1
3. Ejecutar los comandos de abajo contra un archivo .py que contienen simplemente: [.... O QtCore o] o

from PySide import QtGui 

Run

c:\pyinstaller1.5.1>pyinstaller.py -F import_test.py 
108 INFO: wrote c:\pyinstaller1.5.1\import_test.spec 
171 INFO: Testing for ability to set icons, version resources... 
296 INFO: ... resource update available 
312 INFO: UPX is not available. 
4321 INFO: checking Analysis 
4382 INFO: checking PYZ 
4430 INFO: checking PKG 
4446 INFO: building because c:\pyinstaller1.5.1\build\pyi.win32\import_test\import_test.exe.manifest changed 
4446 INFO: building PKG out00-PKG.pkg 
16782 INFO: checking EXE 
16782 INFO: rebuilding out00-EXE.toc because pkg is more recent 
16782 INFO: building EXE from out00-EXE.toc 
16799 INFO: Appending archive to EXE c:\pyinstaller1.5.1\dist\import_test.exe 

c:\pyinstaller1.5.1>dist\import_test.exe 
Traceback (most recent call last): 
    File "<string>", line 23, in <module> 
ImportError: cannot import name QtGui 

Nota

 
At the end of the PySide install (as admin), this message: 
    close failed in file object destructor: 
    sys.excepthook is missing 
    lost sys.stderr 
If that is about post install it can be handled manually: 
    c:>python.exe c:\Python27\Scripts\pyside_postinstall.py -install 
    Generating file C:\python27\qt.conf... 
    PySide installed in c:/python27/Lib/site-packages/PySide... 
    The PySide extensions were successfully installed. 

Respuesta

1

Solución. Esto funcionó:

# Various imports, whatever, using normal sys.path, for example: 
import os, sys, re, time, random 
import subprocess, psutil 

# Save sys.path 
sys_path_saved = sys.path 

# Limit sys.path for PySide import 
sys.path = ['c:\\python27\\lib\\site-packages'] 

# PySide imports with limited sys.path 
from PySide  import QtGui, QtCore 
from PySide.QtGui import QApplication, QLineEdit 
from PySide.QtCore import QSettings, Qt 

# Reset sys.path to original 
sys.path = sys_path_saved 

# Remainder of code... 

PyInstaller 1.5.1 debe hacer un buen trabajo de localización de dependencias, ya menudo lo hace. Sin embargo, fallaron todos los muchos intentos de usar sus pathex u ocultosimportaciones en .spec. La modificación de mis variables de entorno también ha fallado. Extracción de varios archivos de módulo manualmente desde .egg a veces funcionó.

Sin embargo, para las importaciones de PySide, la limitación temporal sys.path anterior fue la solución que funcionó.

Actualización: Desafortunadamente el exe solo funciona en una máquina con Python/Pyside instalado, no funciona en XP sin Python.

Cuestiones relacionadas