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的主要内容,如果未能解决你的问题,请参考以下文章
没有模块 QtMultimedia [Mac OS - Anaconda - Python 3.7 - PyQt5]
Python 3.5,单独窗口中的 pyqt5 进度条 gui