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

时间:2016-12-20 21:44:33

标签: python macos py2app

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

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

之外,我得到一个警告
  

应用程序错误,打开控制台或终止

我的程序是一个python文件,可导入许多模块(opencvtkinter等等。当我从控制台(python app.py)运行它时效果很好,打开我的tkinter窗口等等。

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

感谢您的帮助/指导。

1 个答案:

答案 0 :(得分:1)

那不止一个Q!

没关系。

  1. 当您使用Apple提供的Python解释器构建应用程序时,您将获得半独立应用程序。
  2. 当这样的应用程序启动时,它运行Apple的内置Python并使用其标准库。

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

    1. 当您从python.org安装Python并将所有其他库安装到其中时,您将继续使用它创建应用程序,而不是使用Apple的Python构建,
    2. 然后将整个解释器与标准库以及您导入的任何其他内容打包在一起。

      这通常像魅力一样,虽然它产生了更大的应用程序。但是现在好几天,它不是这样的灾难。

      它是如何工作的? py2app,py2exe和类似的工具检查python代码树的import语句。

      然后找到所有发现的依赖项。

      有问题的部分是使用 import ()或reload()函数的动态导入。对于这样的模块,你必须专门告诉py2app打包它们。

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

      if 0:
          import site
      

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

      我不使用它,所以我不知道你有多麻烦。

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

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

      然后搜索你必须添加到setup.py的内容,以正确打包OpenCV,如果这是你的麻烦的原因。