Python 3 + pyQt5 + cx_freeze

Posted

技术标签:

【中文标题】Python 3 + pyQt5 + cx_freeze【英文标题】: 【发布时间】:2014-03-03 14:10:48 【问题描述】:

过去的一天基本上是持续的沮丧。我正在尝试创建我的第一个 pyQt5 应用程序并将其冻结到 OSX 应用程序。以下是我迄今为止的努力的简短年表:

    注意到 PyQt5 安装仅适用于 Python3。通过 Homebrew 安装了 Python3 和 pyQt。 开发的应用程序。从 PyCharm 启动时一切正常。 由于 Pycharm 的 pip 安装程序在任务中失败,已将 cx_freeze 从源代码安装到 Python3。 尝试使用 cx_freeze 冻结应用程序只是为了得到语法错误。通过应用于 pyQt5 的以下建议解决了它:SyntaxError when using cx_freeze on PyQt app

    查看了 cx_freeze 的教程:http://www.pythonschool.net/cxfreeze_mac/ 并通过示例创建了 setup.py:

    application_title = "simple_PyQt4" #what you want to application to be called
    main_python_file = "main.py" #the name of the python file you use to run the program
    
    import sys
    
    from cx_Freeze import setup, Executable
    
    base = None
    if sys.platform == "win32":
        base = "Win32GUI"
    
    includes = ["atexit","re"]
    
    setup(
        name = application_title,
        version = "0.1",
        description = "Sample cx_Freeze PyQt4 script",
        options = "build_exe" : "includes" : includes ,
        executables = [Executable(main_python_file, base = base)])
    

    使用“bdist_mac”参数运行 cx_freeze。这次生成了 .app 文件。但是,它不会启动。在任何地方都看不到任何错误或信息。单击时根本不启动。

在这一点上,我真的厌倦了所有这些,所以请帮忙。如果可以的话,请帮助我: 1. 用 Homebrew 将 PyQt5 安装到 Python2.7(试过了,搞不明白),这样我就可以使用兼容 Python2 的打包工具了。 2. 让冷冻过程正常工作。如果可能的话给出详细的解释,我是这些工具的新手。

我也有兴趣了解人们应该如何使用 pyQt5 部署独立应用程序,因为这个过程似乎并不简单。

编辑:我按照 ThomasK 的建议在文件夹中运行了结果“main”。我收到以下错误,但不知道这意味着什么:

Traceback (most recent call last):
  File "/usr/local/Cellar/python3/3.3.4/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/cx_Freeze-4.3.2-py3.3-macosx-10.9-x86_64.egg/cx_Freeze/initscripts/Console3.py", line 27, in <module>
    exec(code, m.__dict__)
  File "main.py", line 8, in <module>
  File "/usr/local/Cellar/python3/3.3.4/Frameworks/Python.framework/Versions/3.3/lib/python3.3/importlib/_bootstrap.py", line 1565, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/local/Cellar/python3/3.3.4/Frameworks/Python.framework/Versions/3.3/lib/python3.3/importlib/_bootstrap.py", line 1512, in _find_and_load_unlocked
    _call_with_frames_removed(import_, parent)
  File "/usr/local/Cellar/python3/3.3.4/Frameworks/Python.framework/Versions/3.3/lib/python3.3/importlib/_bootstrap.py", line 313, in _call_with_frames_removed
    return f(*args, **kwds)
  File "/usr/local/Cellar/python3/3.3.4/Frameworks/Python.framework/Versions/3.3/lib/python3.3/importlib/_bootstrap.py", line 1565, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/local/Cellar/python3/3.3.4/Frameworks/Python.framework/Versions/3.3/lib/python3.3/importlib/_bootstrap.py", line 1529, in _find_and_load_unlocked
    raise exc
ImportError: No module named 'ui'

在 main.py 我在第 8 行有这个导入:

from ui.main import Ui_MainWindow

我的项目目录中名为“ui”的文件夹中有所有 .ui 文件及其 .py 对应文件。

编辑:冻结过程的输出:http://pastebin.com/RR9pNGfR 编辑:我的项目架构:http://pastebin.com/HmsdNXEb

【问题讨论】:

尝试运行setup.py build(而不是bdist_mac)。这将为您提供一个包含可执行文件的目录。运行可能会为您提供有关该问题的更多信息。您的应用可能会抛出错误,但是当您单击 .app 时看不到它。 好的,我运行了文件并得到了我添加到原始帖子中的错误。 谢谢。您还可以显示冻结的输出吗? (它会很长;把它放在一个 pastebin 中。)看起来它没有复制 ui 包,出于某种原因。 给你:pastebin.com/RR9pNGfR 例如在哪里? .../ui/commitDialog.py?输出显示它没有找到。 【参考方案1】:

我不知道原发帖人在解决他们的问题上能走多远,而且引用的pastebin早就被删除了,所以补充材料不多,但是the latest version of those cx_freeze instructions at pythonschool,更新于2014-08-27(在这个问题之后),说:

不幸的是,如果您之前使用我们的说明安装了从 Python.org 或 PyQt 安装的 Python 版本,Mac OS X 上的当前版本的 cx_Freeze 不能很好地运行。因此,为确保 cx_Freeze 安装成功,您需要使用名为 MacPorts 的包管理器安装 Python 和 PyQt。

所以,这可能一直是问题所在。 “通过 Homebrew”安装 Python3 和 PyQt 听起来也可能导致配置有问题。

【讨论】:

以上是关于Python 3 + pyQt5 + cx_freeze的主要内容,如果未能解决你的问题,请参考以下文章

安装pyqt5

没有模块 QtMultimedia [Mac OS - Anaconda - Python 3.7 - PyQt5]

Python 3.5,单独窗口中的 pyqt5 进度条 gui

PyQt5 GUI Programming With Python 3.6

如何为 Python 3.4 版本安装 PyQt5?

Python 3.6.3:PyQt5 Matplotlib 条 x 最大面积。 10 项