为什么从第二个终端窗口启动 IDLE 最终会导致两者都冻结?有什么好的解决方法或修复方法吗?

为什么从第二个终端窗口启动 IDLE 最终会导致两者都冻结?有什么好的解决方法或修复方法吗?

我有一台新的 macOS 笔记本电脑,最近安装了 Anaconda Python 3.7。我使用iTerm2打开两个 bash 命令窗口;在第一个窗口中运行 Python,在第二个窗口中输入“idle”,Anaconda 安装程序将其设置为启动其版本的命令闲置的IDE。是的,它适合初学者,但我就是喜欢它。

运行打开图表的脚本一段时间后,我工作的第一个窗口冻结了,我无法再输入内容。这种情况通常发生在我用 matplotlib 绘制某些内容之后。

恢复方法是关闭 iTerm 和 Idle 然后重新开始。

由于这涉及到 OS、bash 和 Python 的某种组合,所以我不确定在哪里问这个问题,所以我想我会先在这里尝试。

问题:为什么从第二个终端窗口启动 IDLE 最终会导致两者都冻结?有什么好的解决方法或修复方法吗?


更新:当我启动 IDLE 时,第二个 iTerm2 窗口中出现警告,这可能是问题的根源:

DEPRECATION WARNING: The system version of Tk is deprecated and may be removed in a future release. Please don't rely on it. Set TK_SILENCE_DEPRECATION=1 to suppress this warning.
2020-08-03 17:08:26.299 Python[561:6540] CoreText note: Client requested name ".SFNSMono-Regular", it will get Times-Roman rather than the intended font. All system UI font access should be through proper APIs such as CTFontCreateUIFontForLanguage() or +[NSFont systemFontOfSize:].
2020-08-03 17:08:26.300 Python[561:6540] CoreText note: Set a breakpoint on CTFontLogSystemFontNameRequest to debug.
2020-08-03 17:08:26.385 Python[561:6540] CoreText note: Client requested name ".SF NS Mono", it will get Times-Roman rather than the intended font. All system UI font access should be through proper APIs such as CTFontCreateUIFontForLanguage() or +[NSFont systemFontOfSize:].
2020-08-03 17:08:26.411 Python[561:6540] CoreText note: Client requested name ".SFNSMono-Regular", it will get Times-Roman rather than the intended font. All system UI font access should be through proper APIs such as CTFontCreateUIFontForLanguage() or +[NSFont systemFontOfSize:].
2020-08-03 17:08:26.411 Python[561:6540] CoreText note: Client requested name ".sf ns mono", it will get Times-Roman rather than the intended font. All system UI font access should be through proper APIs such as CTFontCreateUIFontForLanguage() or +[NSFont systemFontOfSize:].

答案1

Apple 提供的 tcl/tk 8.5.9 已有大约十年历史,并且存在大量错误且容易崩溃。(显然,Apple 不希望有人使用它,否则它会对其进行更新。)因此,像 IDLE 这样通过 tkinter 使用 tk 8.5.9 并使用其各种功能的 Python 程序很容易崩溃——这是不可预测的。

几年前,python.org 还为 Mac tkinter 用户提供了一个页面,介绍如何从 ActiveState 下载和安装较新的 tcl/tk。python.org 当前针对 2.7.16、3.7、3.8 和 3.9 的安装程序安装 tcl/tk 3.6.8,它运行很多更好。(但是 Catalina 对图形进行了足够的更改,从而引入了一些新的不兼容性。)

Python 核心开发人员对 Anaconda 及其如何编译 _tkinter.c(是否与 tcl/tk 8.5 或 8.6 一起运行)以及是否安装可用的 tcl/tk 作为分发的一部分不承担任何责任。

相关内容