cx_freeze pyqt4示例(“\ samples \ PyQt4”)不起作用

时间:2013-04-21 13:35:12

标签: windows-7 64-bit pyqt4 cx-freeze python-3.3

我的系统:

Windows 7,x64,Python 3.3.1,PyQt4 4.10使用安装程序(py3.3-Qt5.0.1-x64),cx_freeze 4.3.1(win-amd64-py3.3)

什么有效:

  • 在终端导航到..python33\lib\site-packages\cx_freeze\samples文件夹(并进入相应的示例文件夹)并执行python setup.py build

  • 这适用于:\simple\tkinter(只是为了确保我在其他地方没有出错)

问题:

  • 但我的目标是获取我的PyQt4-Project的可执行文件/包,所以我尝试使用\PyQt4示例(顺便说一句,PyQt4app.py与python应用程序完美配合)< / p>

  • \PyQt4 >>> python setup.py build最初不起作用:运行生成的PyQt4app.exe会导致错误,要求丢失包“re”

  • 随后我在setup.py文件中包含“re”。 (options = {"build_exe" : {"includes" : ["atexit", "re"]}}

  • 现在它生成一个.exe而不会抛出错误 - 但是运行这个.exe没有做任何事情,只是沉默......

  • cx_freeze似乎找到了正确的依赖关系:python33.dllQt5Core.dllQt5Gui.dllPyQt4.QtCore.pydPyQt4.QtGui.pyd(其中包括:sip,unicodedata等存在。

此处setup.py(未更改,除了“重新”包括&评论已删除)

import sys

from cx_Freeze import setup, Executable

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(
        name = "simple_PyQt4",
        version = "0.1",
        description = "Sample cx_Freeze PyQt4 script",
        options = {"build_exe" : {"includes" : ["atexit", "re"]}},
        executables = [Executable("PyQt4app.py", base = base)])

我出错的任何建议?哪些附加信息有用?

  • 顺便说一句。 - docs.python.org/3/faq指向 py2exe 的链接 - 但py2exe 不适用于Python 3.x !?

编辑:我设法通过设置base = None并通过批处理文件运行.exe来获取控制台输出。输出为:Failed to load platform plugin "windows". Available platforms are:(输出结束 - 没有列表或任何内容)。

那么在何处以及如何加载此插件?

1 个答案:

答案 0 :(得分:4)

好的 - 我找到了解决方法:

qwindows.dll及其文件夹\platforms\qwindow.dll..\python33\lib\site-packages\PyQt4\plugins复制到.exe所在的文件夹中。现在它有效。

修改

我的setup.py现在看起来像这样,似乎也适用于其他情况:

import sys

from cx_Freeze import setup, Executable

base = "Win32GUI"
path_platforms = ( "..\..\..\PyQt4\plugins\platforms\qwindows.dll", "platforms\qwindows.dll" )
build_options = {"includes" : [ "re", "atexit" ], "include_files" : [ path_platforms ]}

setup(
    name = "simple_PyQt4",
    version = "0.1",
    description = "Sample cx_Freeze PyQt4 script",
    options = {"build_exe" : build_options},
    executables = [Executable("PyQt4app.py", base = base)]
    )