PyQT / Windows / Pyinstaller(exe) - NameError:未定义全局名称'QtGui'

时间:2012-06-12 20:39:03

标签: python pyqt pyinstaller

我试图使用pyinstaller将我的python代码转换为可执行文件时遇到问题。我使用的是PyQT 4.9.1和Python 2.7。

我在尝试构建它时遇到错误(Build.py):

Traceback (most recent call last):
  File "Build.py", line 1494, in <module>
    main(args[0], configfilename=opts.configfile)
  File "Build.py", line 1472, in main
    build(specfile)
  File "Build.py", line 1429, in build
    execfile(spec)
  File "c:\projects\vibot\vibotUI_07.py", line 270, in <module>
    window = viUI()
  File "c:\projects\vibot\vibotUI_07.py", line 9, in __init__
    QtGui.QMainWindow.__init__(self)
NameError: global name 'QtGui' is not defined

我搜索过谷歌,所有的解决方案都是基于纠正模块的不正确导入,但我已经开始正确地做了。

以下是我的代码的裁剪版本:

#!/usr/bin/env python

import sys
import os
from PyQt4 import QtCore, QtGui

class viUI(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setWindowTitle('test')
        self.setObjectName('viMainWindow')
        self.resize(400, 600)

        self.show()

app = QtGui.QApplication(sys.argv)
window = viUI()
sys.exit(app.exec_())

这是Makespec.py文件:

# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'c:\\projects\\vibot\\vibotUI_07.py'],
             pathex=['c:\\Python\\pyinstaller-1.5.1\\pyinstaller-1.5.1'])
pyz = PYZ(a.pure)
exe = EXE( pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name=os.path.join('dist', 'vibotUI_07.exe'),
          debug=False,
          strip=False,
          upx=True,
          console=True )

1 个答案:

答案 0 :(得分:1)

在我看来,你正在调用Build.py并将脚本作为参数传递。我刚测试了这个,看看会发生什么,并得到你发布的相同输出。

使用当前稳定的PyInstaller(1.5.1),您需要create a spec file first。而不是Build.py运行MakeSpec.py与您的脚本作为参数。这将创建一个.spec文件,然后您将其发送到Build.py。

该文档显示了可以传递给MakeSpec的选项,例如在Windows下设置图标和设置部署选项。这些选项都会进入spec文件,因此您只需在需要重建应用程序时再次调用Build.py.