如何在Windows上使用Python创建OS X应用程序

IT *_*DAV 6 python macos build pyinstaller py2app

我需要自动化跨平台应用程序构建.整个构建在Windows机器上运行.其中一部分是用Python编写的,并为OS X编译.目前,这部分版本是在OS X上手动完成的.

我尝试了pyinstaller,但它看起来只是为它正在运行的平台构建.我也试过py2app但它没有在Windows上安装.

有没有工具可以在Windows机器上将Python脚本编译到OS X应用程序?

Jim*_*ard 9

简短回答:

显然,使用您提到的标准工具集并没有简单的方法.我概述了一个完全无法解决的解决方案,可能过于复杂而无法考虑.

最终结果:继续手动操作,它可能是目前为止最好的选择.


借鉴可靠和/或官方来源:

Python项目创建单个可执行文件时,micheal0x2a的一个很好的答案中已经有一个长而精选的选项列表,其中概述了可用于创建Python程序的独立发行版的大多数工具.一条线突出:

此外,除非另有说明,否则下面列出的所有程序都将专门为其运行的操作系统生成一个exe.

我可能读错了,但没有明确的跨平台支持说明.

类似的列表可以在Distribution UtilitiesFreezing Your Code - The Hitchhiker's Python指南中找到.从这些我们可以看看Windows支持的项目:


bbfreeze:没有维护,没有关于限制的文档通常被列表中的其余部分取代.


PyInstaller:根据他们的文档:

PyInstaller针对Windows,Mac OS X和Linux进行了测试.但是,它不是交叉编译器:制作Windows应用程序,在Windows中运行PyInstaller; 制作一个Linux应用程序,你可以在Linux等中运行它 .PyInstaller已成功用于AIX,Solaris和FreeBSD,但没有针对它们进行测试.

PyInstaller曾经试图支持交叉编译(从Linux - > Windows)但后来放弃了这个想法.


cx_freeze:在他们的常见问题列表中查看他们对其他平台冻结问题:

cx_Freeze适用于Windows,Mac和Linux,但在每个平台上,它只生成在该平台上运行的可执行文件.因此,如果要冻结Windows程序,请在Windows上冻结它; 如果你想在Mac上运行它,请在Mac上冻结它.


py2app:这不是一个选项,因为py2app只支持基于其注释的OSX机器:

注意:必须在OSX上使用py2app来构建应用程序,它不能在其他平台上创建Mac应用程序.

所以在Windows上安装它是不行的.

这包含了可用于在Windows上创建独立应用程序的工具.即使不在Windows上,也不存在用于创建与操作系统无关的工具的解决方案.

实现这些目标的一般共识是通过虚拟机; 您创建目标操作系统的VM映像,在vm中运行该操作系统的专用工具,然后将捆绑的可执行文件传输到兼容的计算机.由于OSX通常不容易虚拟化,据我所知,你在这里运气不好.


一种复杂的可能方式:

现在,我说没有简单的方法可以做到这一点的原因是因为可能有一个,但从我所看到的,它是如此乏味,你甚至不应该考虑它.我们在这里面临的一般问题是,Windows的可执行文件与OSX完全不兼容,哎呀,Linux可执行文件也不是.所以我们需要的是交叉编译事物的能力.

我听说过一个支持交叉编译的编译器就是clang.因此,为了弥补可执行文件的不兼容性,理论上你可以使用clang作为交叉编译器.问题是,这不是一项简单的任务 ; 它可能比你愿意做的更难,因为它充满了复杂的问题(从OSX到Windows的例子).

如果你确实找到了一种方法,你现在需要.cpp/.cpython脚本中的文件.值得庆幸的是,这可以通过使用NuitkaCython等工具来完成.

这些要点是一样的,进入.py退出.cpp/.c.第二个棘手的部分可能是设置clang编译器与这些一起使用.老实说我不知道​​是否有人这样做过.

我没有太多关注它们,但是对于Nuitka,我知道它也可以在传递--standalone标志时用于创建独立的可执行文件(请参阅:移动到其他计算机).因此,理论上你可以使用Nuitka和clang配置为OSX进行交叉编译.然后你可以休息; 这是你应得的.


小智 9

你可以像这样使用docker镜像https://github.com/sickcodes/Docker-OSX来模拟Mac电脑。

然后,您可以从这个模拟的 Mac 安装 pyinstaller 并从那里运行命令。

然后这将生成所需的文件。

有些人以同样的方式在 Linux 上使用 pyinstaller 创建 Windows 可执行文件。

我不明白为什么这不能从 Windows 到 Mac 工作。

  • 似乎还有一个 [Windows docker 映像](https://hub.docker.com/_/microsoft-windows)。这也可以通过另一种方式实现:从 Mac 构建 Windows (2认同)