1

我在尝试使用 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 )
4

1 回答 1

1

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

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

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

于 2012-06-13T07:51:11.760 回答