无法在终端执行使用 tkinter 和 py2app 创建的 Mac 应用程序

Posted

技术标签:

【中文标题】无法在终端执行使用 tkinter 和 py2app 创建的 Mac 应用程序【英文标题】:Unable to execute at the terminal a Mac app created using tkinter and py2app 【发布时间】:2020-05-07 15:46:27 【问题描述】:

我在运行 Catalina 10.15.4 的 Mac 上使用 Python 3.7 和 IDLE IDE。

我正在尝试使用 tkinter 和 py2app 创建一个简单的应用程序。在这个阶段,我有一个简单的脚本 heatmap.py,它使用 tkinter,接受一个方阵作为输入,例如[[1,2],[3,4]] 并在新窗口中创建热图。该文件执行良好。

此外,如果我创建文件 heatmap.command,首先在 .py 文件顶部插入 #!/usr/bin/env python3,将 heatmap.py 重命名为 heatmap.command,然后键入 chmod +x heatmap .command 在终端上,通过在终端上键入 ./heatmap.command,文件可以正常执行。

所以现在我正在尝试使用 py2app 创建一个应用程序,遵循https://py2app.readthedocs.io/en/latest/tutorial.html 的指示,如下所示,假设我已将终端上的目录更改为在包含 heatmap.py 的目录中工作:

py2applet --make-setup heatmap.py

rm -rf build dist

python setup.py py2app -A

这在没有错误消息的情况下有效。在我的当前目录中,我看到一个文件夹,其中包含一个名为 heatmap 的应用程序。在构建部署之前(通过输入 python setup.py py2app),我尝试在终端运行应用程序:

./dist/heatmap.app/Contents/MacOS/heatmap

这导致了一条错误消息,指出“找不到 tkinter”。

我观察到 /Library/Frameworks/Python.framework/Versions/3.7/lib/Python3.7/site-packages 不包含 tkinter。然而,上一级目录 /Library/Frameworks/Python.framework/Versions/3.7/lib/Python3.7 确实包含它。

作为解决该消息的第一次尝试,我只是将 tkinter 文件夹复制到了 site-packages 文件夹中。这没有用。

所以我尝试以两种不同的方式再次安装它:

    在终端中:pip install tkinter

    使用空闲:

    一个。首先通过sys命令确定IDLE中获取的系统可执行路径; sys.executable, 返回'/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7'

    b.然后输入 /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install tkinter

方法 2 是我使用 IDLE 安装许多其他软件包的方式。在这两种情况下,我都收到以下错误消息:

错误:找不到满足 tkinter 要求的版本(来自版本:无) 错误:没有为 tkinter 找到匹配的分布

这是否意味着 3.7 不支持 tkinter?我不认为是这样,还是我犯了一些错误?

【问题讨论】:

不要使用 pip 安装 tkinter。我想这应该可以使用 brew,但是,不确定。 Python 3.7 确实支持 tkinter,但 pip 无法安装它。 感谢您对 3.7 支持的澄清。我不知道应用程序在执行时是如何运行的,但我的操作系统是否会尝试使用旧版本的 Python 运行应用程序? 我不这么认为,因为你说你已经尝试用 pip 安装它。 【参考方案1】:

我使用发布在

上的说明将我的 OS python 版本从 2.7.16 更新到 3.7

https://dev.to/malwarebo/how-to-set-python3-as-a-default-python-version-on-mac-4jjf

然后一切正常。我也可以通过双击 heatmap.app 来部署应用程序并正常打开它。

【讨论】:

以上是关于无法在终端执行使用 tkinter 和 py2app 创建的 Mac 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

我如何使用python将终端输出到网格中的tkinter框架?

如何从Python Tkinter应用程序中捕获任何输出到控制台?

Python3 和 Tkinter - 无法分配 27 个字节

无法将图像添加到 tkinter 中的类

在 Tkinter 框架内嵌入 konsole 或 gnome 终端

创建可执行的 tkinter