2012-07-04 176 views
5

使用在Windows 7最新pyinstaller做一个独立的EXE(-F),运行exe文件时:Pyinstaller:导入错误:无法导入名称QtGui

ImportError: cannot import name QtGui

在pyinstaller钩目录中有特殊处理PyQt4虽然不是PySide。

希望为此解决方法或尝试。

环境
视窗7 64位
的Python 2.7 32位
PYTHONHOME = C:\ python27
PYTHONPATH = C:\ python27 \ lib中
PYTHONLIB = C:\ python27 \库\ python27.lib; C:\ python27 \ LIB \站点包

步骤
1.添加从http://releases.qt-project.org/pyside/1.1.1/PySide-1.1.1qt474.win32-py2.7.exePySide 2.解压https://github.com/pyinstaller/pyinstaller/zipball/develop到c:\ pyinstaller1.5.1
3.运行下面的命令针对.py文件含有简单:[...或QtCore或或]

from PySide import QtGui 

运行

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 

注意

 
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. 

回答

1

解决方法。这工作:

# 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应该做定位的依赖了很好的工作,并经常做。 但是,在.spec中使用其pathex或hiddenimport的许多尝试都失败了。 修改我的环境变量也失败了。 从.egg手动提取各种模块文件有时可用。

但是,对于PySide导入,上面的sys.path临时限制是有效的解决方法。

更新:不幸的是,该exe只适用于安装了Python/Pyside的机器,在没有Python的情况下XP无法正常工作。