2012-07-04 12 views
5

Mit dem neuesten pyinstaller auf Windows 7 zu einer eigenständigen exe (-F) zu machen, wenn die exe ausgeführt wird:Pyinstaller: Import: nicht Namen importieren QtGui

ImportError: cannot import name QtGui

Im pyinstaller Haken Verzeichnis gibt es eine spezielle Behandlung für PyQt4 obwohl nicht PySide.

In der Hoffnung auf eine Abhilfe für diese oder etwas zu versuchen.

Environment
Windows 7 64-Bit-
Python 2.7 32-Bit-
PYTHON = c: \ python27
PYTHONPATH = c: \ python27 \ lib
pythonlib = c: \ python27 \ libs \ python27.lib; c: \ python27 \ lib \ site-packages

Schritte
1. hinzufügen pyside von http://releases.qt-project.org/pyside/1.1.1/PySide-1.1.1qt474.win32-py2.7.exe
2. Dekomprimieren https://github.com/pyinstaller/pyinstaller/zipball/develop auf c: \ pyinstaller1.5.1
3. Führen Sie die folgenden Befehle an einer Py-Datei enthält einfach: [. ... oder QtCore oder oder]

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 

Hinweis

 
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. 

Antwort

1

Problemumgehung. Das funktionierte:

# 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 sollte einen guten Job zu lokalisieren Abhängigkeiten tun, und oft tut. Alle Versuche, den pathex oder hiddenimports in .spec zu verwenden, sind jedoch fehlgeschlagen. Das Ändern meiner Umgebungsvariablen ist ebenfalls fehlgeschlagen. Das manuelle Extrahieren verschiedener Moduldateien von .egg funktionierte manchmal.

Bei PySide-Importen war jedoch die obige temporäre Begrenzung sys.path die Workaround, die funktionierte.

Update: Leider funktioniert die exe nur auf einer Maschine mit Python/Pyside installiert, funktioniert nicht auf XP ohne Python.

Verwandte Themen