无法在终端执行使用 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.7https://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 个字节