在PyQt应用程序上使用cx_freeze时的SyntaxError

Woo*_*e88 4 python pyqt cx-freeze python-3.x

当尝试使用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
Run Code Online (Sandbox Code Playgroud)

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

Woo*_*e88 9

问题在于,cx_freeze尝试使用uicPython 2的子模块,而不是3,并在其中一个文件中遇到Py3不兼容的语法.解决方案非常简单:

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