【发布时间】: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包,出于某种原因。 -
例如在哪里?
.../ui/commitDialog.py?输出显示它没有找到。
标签: python deployment pyqt homebrew cx-freeze