在 PyQt 应用程序上使用 cx_freeze 时出现语法错误

Posted

技术标签:

【中文标题】在 PyQt 应用程序上使用 cx_freeze 时出现语法错误【英文标题】:SyntaxError when using cx_freeze on PyQt app 【发布时间】:2013-12-15 01:03:49 【问题描述】:

这是在尝试使用 PyQt4 从 Python 3 脚本构建 .exe 文件时出现的非常烦人的问题。我认为它与使用uic 模块动态加载.ui 文件有关。 cx_freeze 返回:

  File "E:\Python32_32\lib\site-packages\cx_Freeze\finder.py", line 366, in _LoadModule
    module.code = compile(codeString, path, "exec")
  File "E:\Python32_32\lib\site-packages\PyQt4\uic\port_v2\load_plugin.py", line 41
    except Exception, e:
                    ^
SyntaxError: invalid syntax

我前段时间解决了这个问题,但我最近又遇到了。在网上找到解决方案并不容易,所以我决定在 SO 上发布问答。希望它不仅对我有帮助:-)。

【问题讨论】:

【参考方案1】:

问题实际上在于cx_freeze 尝试将uic 子模块用于Python 2,而不是3,并且在其中一个文件中遇到了与Py3 不兼容的语法。解决方法很简单:

找到uic目录,它应该位于your_python_dir\Lib\site-packages\PyQt4\uic。那里有两个目录:port_v2port_v3。将第一个重命名,例如重命名为 port_v2_。我认为在使用 Python2-rename v3 时可能会出现类似的问题。无论如何,这将导致 cx_freeze 找到正确版本的 uic 并且脚本应该正确构建。

【讨论】:

以上是关于在 PyQt 应用程序上使用 cx_freeze 时出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章

在 PyQt5 中使用 cx_freeze,找不到 PyQt5

PYQT资源,冻结程序

用pyqt4设置mac任务栏菜单然后应用cx_freeze

cx_freeze打包后pyqt应用程序丢失图标[重复]

Python 3 + pyQt5 + cx_freeze

使用 cx_Freeze、PyQt5、Python3 构建的 exe 无法导入 ExtensionLoader_PyQt5_QtWidgets.py 并运行