使用cx_freeze转换pyside app时可能出现的uiloader问题

时间:2016-02-20 19:32:48

标签: python pyside cx-freeze uiloader

我正在尝试使用 cx_freeze pyside 应用转换为Windows上的可执行文件(.exe)。打包没有问题,但是在启动生成的.exe文件时,我收到以下错误:

  

ImportError:无法导入模块" PySide.QtXml"

当我尝试转换 cx_Freeze \ Samples \ PyQt4 附带的应用时,它运行没有任何问题。

在这个示例应用程序中,只有一个简单的QDialog被调用,但在我的应用程序中,我使用 QtDesigner 进行GUI设计,并使用 PySide {加载它{1}}直接在我的py.file中:

UiLoader

setup.py

class MainWindow(QtGui.QMainWindow):

def __init__(self,parent=None):
    QMainWindow.__init__(self)
    loader = QUiLoader()
    self.ui = loader.load('xxxx.ui',self)
    QMetaObject.connectSlotsByName(self)

我认为在使用 cx_freeze 进行转换时使用from cx_Freeze import setup, Executable # Dependencies are automatically detected, but it might need # fine tuning. buildOptions = dict(packages = [], excludes = []) import sys from cx_Freeze import setup, Executable from PySide import QtXml base = 'Win32GUI' if sys.platform=='win32' else None options = { 'build_exe': { 'includes': 'atexit' } } build_exe_options = { 'includes': ['atexit'], } executables = [ Executable('xxx.py', base=base) ] setup(name='xxx', version = '0.10', description = 'First try', options = dict(build_exe = buildOptions), executables = executables) 会出现问题,但我不知道如何克服此问题。

1 个答案:

答案 0 :(得分:0)

这似乎是个老问题。我仍在回答,因为这会帮助那些正在寻找解决方案的人。

解决方案非常简单,您只需添加" PySide.QtXml"到包含列表。在此之后,您的setup.py将如下所示

build_exe_options = {
    'includes': ['atexit'],
    'packages': ['PySide.QtXml'],
    }