Search code examples
pysidepyinstaller

Pyinstaller: ImportError: cannot import name QtGui


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 "<string>", line 23, in <module>
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.


Solution

  • 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.