1

我正在尝试为脚本构建发行版。我已经使用 py2exe 创建了一个 exe 文件,它工作正常。我正在尝试使用 py2app 为 Mac 创建类似的东西。但是,当我使用命令时出现此错误

python setup.py py2app

错误消息:python 二进制文件根本没有共享库(或框架)

知道为什么会这样吗?我正在导入一些像 BeautifulSoup 这样的模块,除了像 urllib 这样的标准模块,主脚本文件中的数学我在运行 python 2.7 的 64 位 Windows 机器上运行整个东西

4

1 回答 1

7

您需要py2app在 Mac 上运行。

py2app代码使用用于运行它的 Python 副本来构建独立的可执行文件。如果该 Python 不是 Mac 版本(如果您在 Windows 上运行,则不是),它将无法创建 Mac 可执行文件。

从技术上讲,错误消息告诉您它找不到libpython.dyliborPython.framework关联sys.executable,这是真的,但在这种情况下可能更有用。


有一些替代方法py2app,例如cx_freeze,但它们的工作方式都相同:从用于运行它们的 Python 安装构建一个可执行文件。

因此,如果您想在 Windows 上构建 Mac 可执行文件,则没有自动化的方法可以做到这一点。

但有几种可能性。

首先,您可以花 100 美元左右购买二手 Mac Mini。为开发设置它,打开远程登录访问(在首选项的共享窗格中)并让它在角落里运行。在 Windows 中,您可以使用一个小的 4 行ssh脚本来告诉 Mac 检查源、py2app它、zip结果,然后scp将其移至 Windows 框(或通过 Windows 文件共享复制它,或ftp它,或检查它进入源代码控制或其他)。

如果由于某种原因这不可行,希望您至少可以偶尔访问 Mac。(如果没有,您将如何测试?)。如果是这样,您可以构建一个应用程序py2app并将其压缩以用作模板。每次您想要创建一个新版本时,您都可以在 Windows 上执行此操作,只需修改模板中的内容即可。

foo.py脚本进入foo.app/Contents/Resources/foo.py. 任何其他 Python 模块(无论是标准库、第三方还是您自己的代码),除了少数例外,都进入foo.app/Contents/Resources/lib. 任何 C 扩展模块都进入一个目录,如foo.app/Contents/Resources/lib/python2.7/lib-dynload.

只要您不修改任何 C 扩展,升级到新版本的 Python,或添加您不知道如何手动安装的新第三方库(例如,因为您通过 获取它们作为鸡蛋easy_install),这将继续有效。如果您执行上述任何操作,则需要返回 Mac 并使用py2app.

如果您根本无法使用 Mac,您也许可以py2app为其他项目找到一个预构建的应用程序,该应用程序恰好包含您需要的所有内容,在这种情况下,您可以将用作模板。但这是一个巨大的延伸。

于 2013-03-13T23:20:46.490 回答