如何使用Python程序制作macOS应用程序?

2024-09-27 02:26:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我之所以提出这个问题,是因为我必须使用苹果公司有点缺乏的文档,并且不使用py2app来完成创建自己的应用程序的整个过程。我想创建整个应用程序结构,以便准确地了解其中的内容,并为其创建一个安装程序。后者仍然是一个谜,因此任何关于定制安装程序的附加答案都将不胜感激。然而,就实际的“bundle”结构而言,我认为我已经成功地掌握了基本知识。见下面的答案


Tags: 答案文档应用程序内容过程结构bundlepy2app
1条回答
网友
1楼 · 发布于 2024-09-27 02:26:04

编辑:本答案末尾链接了关于使用PyInstaller的教程;我不知道它有多大帮助,因为我还没有使用它,但我还没有弄清楚如何在不使用类似工具的情况下创建一个独立的Python应用程序,如果您希望在不依赖用户了解如何导航其Python安装的情况下分发应用程序,它可能正是您想要的

通用应用程序实际上只是一个具有.app扩展名的目录。因此,为了构建应用程序,只需先创建没有扩展名的文件夹。您可以在完成所有组装后重命名它。在这个主文件夹中将有一个Contents文件夹,它将保存应用程序所需的所有内容。最后,在Contents中,您将放置一些东西:

  1. Info.plist
  2. MacOS
  3. Resources
  4. Frameworks

Here您可以找到一些有关如何编写Info.plist文件的信息。基本上,这是您详细了解应用程序信息的地方

MacOS中,您要放置主可执行文件。我不确定你是怎么写的;起初,我有一个shell脚本,名为python3 ./../Resources/MyApp.py。我认为这不是很好,所以最终我从一个Python脚本调用了GUI,该脚本成为了我的可执行文件(我使用Tkinter构建了我的应用程序的GUI,并编写了几个模块,我将在后面介绍)。现在,我的可执行文件是一个Python脚本,其中一个shebang指向我的应用程序的Frameworks文件夹中的Python框架,这个脚本刚刚创建了一个自定义Tk()子类的实例并运行了mainloop。不过,这两种方法都有效,所以除非有人指出选择一种方法而不是另一种方法的理由,否则请随意选择。我认为有一件事是必要的,那就是将可执行文件命名为与应用程序相同的名称(在添加.app之前)。我相信,这是MacOS知道的将该文件用作应用程序可执行文件的唯一方法Here是更详细地描述束结构的源代码;除非你真的想读,否则这本书不是必要的

为了使可执行文件顺利运行,您需要确保知道Python安装的位置。如果你像我一样,你在新Mac电脑上尝试做的第一件事就是打开终端并键入python3。如果是这种情况,则会提示您安装Xcode命令行工具,其中包括安装Python3.8.2(最新版本为Xcode 12)。然后,这个Python安装将位于/usr/bin/python3,尽管它实际上使用位于的Python框架

/Applications/Xcode.app/Developer/Library/Frameworks/Python3.framework/Versions/3.8/bin/python3

我相信,但我不确定,你可以简单地复制这个框架,并将其添加到你的Frameworks文件夹中,以使应用程序可移植。制作Python3.framework文件夹的副本,并将其添加到应用程序的Frameworks文件夹中。要警惕的简短旁注;Xcode附带了许多有用的工具。在我目前的进展中,我最痛心的工具是Fortran编译器(我相信它是GCC的一部分),它是Xcode附带的。我需要这个来用pip install scipy构建SciPy。我确信这不是唯一一个需要Xcode提供的工具的软件包,但是SciPy是一个非常流行的软件包,我目前正面临这个限制。我认为,通过复制Python框架,您仍然会丢失指向Xcode工具的一些符号链接,因此在这方面的任何额外输入都是非常好的

在任何情况下,找到用于开发程序的Python框架,并将其复制到Frameworks文件夹中

最后是Resources文件夹。在这里,放置您为Python应用程序编写的所有模块。您还需要将应用程序的图标文件放在此处。只需确保在Info.plist文件中指定图标文件的名称和扩展名。另外,确保您的可执行文件知道如何访问您放置在此处的任何模块。你可以做到这个

import os
os.chdir('./../Resources')
import MyModules

最后,确保应用程序所需的任何依赖项都位于Python框架站点包中。这些将位于Frameworks/Python3.framework/Versions/3.X.Y/lib/python3.x.y/site-packages/。如果您从命令行调用Python的这个特定安装,您可以使用path/to/application/python3 -m pip install package,它应该将包放在正确的文件夹中

另外,关于为该应用程序构建安装程序,在下载应用程序之前,还需要执行一些步骤。例如,我认为您需要使用codesign工具来批准您的MacOS Gatekeeper应用程序。这需要有一个开发者许可证和操作证书,我对此并不熟悉。你仍然可以发布这个应用程序,但是任何下载它的人都必须手动绕过安全功能,这看起来有点粗略。如果您已经准备好构建安装程序(.pkg)文件,请查看productbuilddocs;我使用了它,它可以工作,但我还不知道如何在安装程序中创建自定义步骤和说明

额外资源:

A somewhat more detailed guide to the anatomy of a macOS app

A guide I found, but didn't use, on using ^{} to get your app past Gatekeeper

A RealPython tutorial I found on using PyInstaller to build Python-based applications for all platforms

相关问题 更多 >

    热门问题