【问题标题】:Possible uiloader issue when converting pyside app using cx_freeze使用 cx_freeze 转换 pyside 应用程序时可能出现 uiloader 问题
【发布时间】:2016-06-02 08:48:25
【问题描述】:

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

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

当我尝试转换 cx_Freeze\Samples\PyQt4 附带的应用程序时,它可以正常运行。

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

class MainWindow(QtGui.QMainWindow):

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

setup.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_freeze 进行转换时使用 UiLoader 会出现一些问题,但我不知道如何解决这个问题。

【问题讨论】:

    标签: python pyside cx-freeze uiloader


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      相关资源
      最近更新 更多