使我的 python 程序成为真正的应用程序

Making my python program a real application

使用此处的简单说明https://www.metachris.com/2015/11/create-standalone-mac-os-x-applications-with-python-and-py2app/

我现在在 dist 中有一个应用程序文件。但是,当我打开它时,我收到一条警告,除了

App Error, Open Console or Terminate

我的程序是一个 python 文件,它导入了许多模块(opencvtkinter 等等)。当我从控制台 运行 它时 (python app.py) 它工作得很好,打开我的 tkinter window,等等

那么首先,可能出了什么问题?而且,这实际上应该如何工作,该应用程序是否也包含所有 opencv? python 模块如何包含在这样的便携式应用程序中?

感谢您的帮助/指导。

不止一问!

没关系。

  1. 当您使用 Apple 提供的 Python 解释器构建应用程序时,您会得到半独立的应用程序。

启动此类应用程序时,它会运行 Apple 内置的 Python 并使用其标准库。

任何非标准模块都应该包含,但经常会遇到问题。

  1. 当您从 python.org 安装 Python 并将所有其他库安装到其中时,您将继续使用它制作应用程序,而不是使用 Apple 的 Python、

然后整个解释器连同标准库以及您导入的任何其他内容一起打包。

尽管它可以生成更大的应用程序,但它通常很有用。但现在,它不是这样的灾难。

它是如何工作的? py2app、py2exe 和类似工具检查 python 代码树中的导入语句。

然后找到的所有依赖项都包含在包中。

有问题的部分是使用 import() 或 reload() 函数的动态导入。对于此类模块,您必须明确告诉 py2app 将它们打包。

有时在您的应用中向其添加静态导入就足够了,例如:

if 0:
    import site

OpenCV,嗯,祝你好运!它有时会给 C++ 的正确 link 路径带来生活噩梦,我希望将它与 Python 一起打包到应用程序中会起作用。

我没用过,不知道你有多大的困扰

使用 /Applications/Utilities/Console.app 查看您的应用程序打包后发送到 stderr/stdout 的任何错误和回溯。您可能会在那里找到一些有用的信息。

但我建议您下载自定义 Python 解释器并制作完整的独立应用程序。 没什么大不了的。只需用它而不是内置的调用 setup.py。

并搜索您必须添加到 setup.py 中的内容以正确打包 OpenCV,如果它是您遇到麻烦的原因。