37

我想创建一个可以在 Windows 和 Mac 上运行的 GUI 应用程序。为此,我选择了 Python。

问题出在 Mac OS X 上。

有 2 个工具可以为 Mac 生成“.app”:py2app 和 pyinstaller。

  1. py2app 还不错,只是在包里加了源码。我不想与最终用户共享代码。
  2. Pyinstaller 生成 UNIX 可执行文件,那么如何在 Mac 上运行呢?我用这个可执行文件创建了一个包,但结果“.app”不起作用。

问题是:

  1. 如何配置 py2app 以将源代码包含在可执行文件中,这样最终用户将无法访问我的程序?
  2. 如何将 UNIX 可执行文件转换为 Mac“.app”?
  3. 有没有办法用 GCC 编译 Python 代码?
  4. 在 Windows 中这很容易,我从 Python 代码创建了一个“exe”文件,它可以工作。是否可以为 Mac 创建单个文件“应用程序”?

PS 我使用两台计算机(Windows 和 Mac),Python 2.7、wxPython、py2exe、py2app 和 pyinstaller。

另外,我查看了这些网站:

4

11 回答 11

9

如何配置 py2app 以将源代码包含在可执行文件中,这样最终用户将无法访问我的程序?

除非您非常认真地破解 python 解释器(并包括损坏的版本),否则没有真正好的方法可以向中等技能和坚定的用户隐藏源代码。我坚信这在 Windows 上也是如此。基本上,无论您包含真正的源代码还是字节码,都可以恢复相当干净的源代码版本。更重要的是,在我看来,除非您包含实际的源代码(与字节码相反,您将引入对解释器版本的可能依赖)。

如何将 UNIX 可执行文件转换为 Mac“.app”?

UNIX 可执行文件是什么意思?一个 Darwin (OS X) 二进制文件 [实际上不是 UNIX]?这可以使用您已经提到的各种工具来完成,但必须小心避免库依赖。

如果您只希望它是一个简单的包装器来将命令行二进制文件放入窗口,那么它很容易完成,并且免费的 XCode 套件有几个可以提供服务的示例(取决于您想要提供的输出,如果有的话)。

有没有办法用 GCC 编译 Python 代码?

GCC 不编译 Python。它是一种不同的语言(尽管 gcc 家族中的工具支持多种语言前端,但不支持 Python)。有一些工具试图将 Python 翻译成 C,然后您可以将其编译成真正的二进制文件,但这仅适用于避免某些类型构造的程序,并且该过程(和限制)也需要应用您的库。
一个允许这样做的项目是 Cython。它适用于某些类型的代码,主要是数字代码,但安装和利用并非易事,尤其是如果您想生成在多台不同计算机上运行的东西。

在 Windows 中这很容易,我从 Python 代码创建了一个“exe”文件,它可以工作。是否可以为 Mac 创建单个文件“应用程序”?

我不得不说我对此持怀疑态度——非常怀疑。就像 OS X 案例一样,exe 几乎可以肯定在其中可以轻松访问源代码。

一个相当简单的技巧是加密源代码,然后即时解密,但在我看来,这似乎比它的价值更麻烦。

于 2013-02-17T21:14:07.753 回答
8

PyInstaller 将在 Mac OSX 下为窗口可执行文件自动创建包。运行 ypinstaller.py 时,请确保传递选项“--windowed”。

此功能记录在 pyinstaller 的网站中

于 2013-10-30T02:58:39.550 回答
6

如果您不完全致力于 wxPython(以及其他任何寻找跨平台 Python GUI 框架的人),我建议您查看Kivy。它是跨平台的、GPU 加速的,它会为您完成应用程序打包。它很容易上手,具有经过深思熟虑的架构,并在界面方面为您提供了难以置信的灵活性。这是我发现制作跨平台 Python GUI 应用程序的最佳方式。

于 2013-02-23T04:22:49.763 回答
4

cxFreeze是选择。我使用它将我的 python 程序打包到 Mac OS X 应用程序中。这就像一个魅力。

于 2013-05-21T16:15:19.927 回答
2

Automator已经被提到作为一个包含在单个文件中的 Python 脚本的快速简单的解决方案,但是由于 Automator UI 有很多选项,并且实际操作并不明显,我将提供一步一步-步骤说明(已验证可在 Yosemite 上工作):

  1. 在 Automator 中选择File>New并选择应用程序作为文档类型。
  2. 接下来,确保在左侧选择了Actions选项卡,然后在搜索框中键入run。在其他选项中,您将看到Run Shell Script — 双击它,右侧面板中将出现一个编辑器窗口。
  3. Shell下拉菜单中选择/usr/bin/python
  4. 将您的 Python 代码粘贴到编辑窗口中,然后选择File> Save

默认情况下,该应用程序将保存在 Spotlight 下$HOME/Applications并出现在 Spotlight 中。

如果您希望能够设置自己的图标并拥有一些花哨的功能,例如带有菜单的任务栏图标、日志窗口等,那么看看Platypus——一个用于创建 MacOS 原生包的开源应用程序。

于 2015-07-26T15:44:29.967 回答
1

2:您不能“转换”它,但您可以将可执行文件移动到App.app/Contents/MacOS/something.app 文件中,并CFBundleExecutable设置为“某物”。通常不建议这样做。

于 2012-10-17T16:04:38.523 回答
0

为 Windows 用户使用了 py2exe,因此他们不必处理库版本,我已经分解了编译的程序,它们包括 python 字节码文件。虽然您可以违反许可证来查看这些内容,但事实是,如果计算机可以执行它们,我就可以阅读它们。可以通过 C 预处理器使用 gcc 编译 python 程序(尝试在 google 上查找 2c.py),我不知道它们是否支持 GCC。同样,您不会通过使用它们获得任何安全性,但您可以获得显着的速度提升。

于 2012-09-29T02:10:20.777 回答
0

我没有在大型 Python 项目中尝试过,但对于我自己的脚本,我发现最简单的方法是使用Automator

您可以使用Run Shell Script操作交互式地创建应用程序项目,然后将脚本粘贴到其编辑器中,选择您的 shell 程序(/usr/bin/python),最后保存项目。而且您拥有自己的 Mac 原生应用程序。

Automator 也可以由 AppleScript 驱动。因此,您可以将此 py-2-app 转换过程通过管道传输到您的构建脚本中。

我从来没有用它测试过 GUI 程序,所以我不知道你是否会满意。但我会试一试,因为您可能想知道所有引用的第 3 方 python 模块/应用程序的维护情况如何,以及它们会持续多久。与 OS X 捆绑在一起的 Automator 可能会继续存在,除非苹果真的厌倦了它。

于 2014-02-16T16:32:05.507 回答
0

一个有动力的人可能会从你的应用程序中的 Python 字节码重建可用的源代码,所以你可能会重新考虑你对 py2app 的反对。如果你不信任你的最终用户,你为什么要和他们做生意?

于 2011-08-31T19:14:55.683 回答
0

cxFreeze是最好的解决方案,首先使用 python 创建您的程序或应用程序,然后为您的应用程序制作设置文件,然后使用 build 命令构建应用程序python setup.py build,根据您的要求,您需要进行一些更改。

于 2018-11-28T11:40:24.370 回答
-1

唯一的方法是py2app。你没有别的办法。对不起。你所做的研究看起来很扎实,你没有错过任何东西。

于 2012-09-18T09:55:50.023 回答