2

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

ImportError:无法导入模块“PySide.QtXml”

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

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

class MainWindow(QtGui.QMainWindow):

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

安装程序.py

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)

在我看来,使用cx_freezeUiLoader转换时存在一些问题,但我不知道如何克服这个问题。

4

1 回答 1

0

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

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

build_exe_options = {
    'includes': ['atexit'],
    'packages': ['PySide.QtXml'],
    }
于 2016-07-10T14:32:40.183 回答