Pyinstaller: ImportError: cannot import name QtGui

匿名 (未验证) 提交于 2019-12-03 01:48:02

问题:

Using the latest pyinstaller on Windows 7 to make a standalone exe (-F), when running the exe:

ImportError: cannot import name QtGui

In the pyinstaller hooks directory there is special handling for PyQt4 though not PySide.

Hoping for a workaround for this or something to try.

Environment
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

Steps
1. Add PySide from http://releases.qt-project.org/pyside/1.1.1/PySide-1.1.1qt474.win32-py2.7.exe
2. Unzip https://github.com/pyinstaller/pyinstaller/zipball/develop to c:\pyinstaller1.5.1
3. Run the commands below against a .py file containing simply:

from PySide import QtGui 

[...or QtCore or or.]

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 "", line 23, in  ImportError: cannot import name QtGui 

Note

 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:

Workaround. This worked:

# 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 should do a fine job of locating dependencies, and often does. However, all of many many attempts to use its pathex or hiddenimports in .spec failed. Modifying my environment variables also failed. Extracting various module files manually from from .egg sometimes worked.

However for PySide imports, the sys.path temporary limitation above was the workaround that worked.

Update: Unfortunately the exe only works on a machine with Python/Pyside installed, doesn't work on XP without Python.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!