Kar*_*tel 19 python installation tkinter modulenotfounderror
当尝试使用 Tkinter 标准库包或其相关功能(海龟图形使用turtle
和内置 IDLE IDE)或使用将此作为依赖项的第三方库(例如显示使用 Matplotlib 的图形窗口)。
似乎即使不存在因隐藏标准库模块名称而引起的问题(对于尝试遵循教程并使用海龟图形的初学者来说,这是一个常见问题 -示例 1;示例 2;示例 3;示例 4),通常会发生标准库 Tkinter 无法工作的情况。这是一个大问题,因为许多初学者再次尝试遵循使用海龟图形的教程,并盲目地假设turtle
标准库将会存在。
可能会报错:
作为ModuleNotFoundError: No module named 'tkinter'
; 或ImportError
具有相同消息的 ;或使用不同的大小写(我知道名称从Tkinter
2.x 更改为tkinter
3.x;这是一个不同的问题)。
类似地,但引用内部_tkinter
模块,并显示带有注释的代码“如果失败,您的 Python 可能无法配置 Tk”;或者使用自定义错误消息“请安装 python-tk 包”或类似内容。
当尝试turtle
专门使用时,出现“没有名为turtle的模块” ,或者上述错误之一。
当尝试使用 Matplotlib 显示绘图时;通常,这种情况会在尝试更改后端后发生,默认设置是为了避免尝试使用 Tkinter。
当 Tkinter 被记录为标准库的一部分时,为什么会出现这样的问题?如何添加或修复缺少的标准库功能?对于特定的 Python 环境是否有任何特殊问题?
另请参阅:“UserWarning:Matplotlib 当前正在使用 agg,它是非 GUI 后端,因此无法显示该图。” 在 Pycharm 上使用 pyplot 绘制图形时。可以使用其他 GUI 后端与 Matplotlib 来显示图形;但如果TkAgg
后端无法工作,那是因为 Tkinter 安装丢失或错误。
在Python 3.x 中,Tkinter 标准库模块的名称从 更正为Tkinter
(tkinter
即全部小写),以保持一致的命名约定。请使用tkinter 和 Tkinter 之间的差异来关闭由于尝试在 3.x 中使用旧名称(或在 2.x 中使用新名称)而引起的重复问题。这个问题是关于 Tkinter 实际上不可用的情况。如果不清楚哪种情况适用,请提供两个重复的链接,或将问题关闭为“需要调试详细信息”。
Kar*_*tel 33
pip
尝试解决问题Pip包管理器无法帮助解决这个问题。Python 标准库的任何部分(包括tkinter
等turtle
)都不能从 PyPI 安装。出于安全原因,PyPI 现在阻止使用与标准库匹配的名称的包。
PyPI 上有许多包可能看起来合适,但实际上并不合适。大多数只是尝试向标准库 Tkinter 添加一些功能的包装器。然而,一个特别有问题的包是turtle
. 它不应该在那里,因为当前的政策(自 2017 年以来)是阻止名称与标准库匹配的包;但它早在那之前就已上传,此后就没有维护过。它是Python 2.x 特定的代码,在 Python 3 上安装时会损坏,已经过时了(2009 年发布),而且最重要的是,它与海龟图形没有任何关系。我目前正在尝试将其从 PyPI 中除名。
Tkinter 丢失的原因有多种,具体取决于平台(尽管一般来说,动机可能只是为了节省空间)。
当使用官方安装程序在 Windows 上安装 Python 时,可以选择包含或排除 Tcl/Tk 支持。
根据发行版维护者的政策,随 Linux 预装的 Python 安装可能不包括 Tkinter 或各种组件。例如,我的 Linux 副本附带的 Python 包含turtle
标准库,但不包含底层 Tkinter 包:
>>> import turtle
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.8/turtle.py", line 107, in <module>
import tkinter as TK
ModuleNotFoundError: No module named 'tkinter'
Run Code Online (Sandbox Code Playgroud)
其他版本可能也不包含该turtle
模块。
由于故意选择的配置选项,或者因为在开始编译之前缺少依赖项,从源代码构建的 Python 可能会缺少 Tkinter 支持。
请注意,虚拟环境通常与它们所基于的 Python 安装具有相同的 Tkinter 支持。但是,向基础添加 Tkinter 支持可能不会更新虚拟环境。在这种情况下,有必要从头开始重新创建虚拟环境。无法添加或删除对单个虚拟环境的 Tkinter 支持。这是因为虚拟环境仅在站点包方面与其基础有所不同,并且 Tkinter 没有站点包(因为它是无法使用 Pip 获取的标准库组件)。
也可以看看:
对于使用 python.org 的官方安装程序安装的 Python,请使用操作系统功能选择“修复”安装(或者,如果可以的话,卸载并重新安装 Python)。这次,请确保选中安装“tcl/tk 和 IDLE”可选功能的选项。
某些旧设置可能存在 32 位和 64 位版本的 Python 与 Tcl/Tk 之间冲突的问题。这不会对新设置造成问题。
有关可嵌入 zip 包,请参阅Python 可嵌入 zip:安装 Tkinter。
如果您的 Linux 发行版附带的 Python 不包含 Tkinter,请考虑将其保留并安装单独版本的 Python - 只是一般原则。不过,一般来说,可以使用系统包管理器(而不是 Pip)将 Tkinter 支持添加到系统Python 中。
通常需要使用Python sudo
(此处未包含在示例中)对系统进行此类更改。
在基于Ubuntu 和 Debian的系统(包括 Pop!_OS、基于 Ubuntu 的 Mint)上:使用apt-get install python3-tk
,假设系统 Python 是 3.x 版本。对于 2.x 遗留系统,请apt-get install python-tk
改用。在某些情况下,可能需要指定次要版本,例如apt-get install python3.11-tk
. 在某些情况下,自定义异常消息可能会说要安装python-tk
,尽管python3-tk
实际上应该安装。
对于Fedora,请使用d-coder此处dnf install python3-tkinter
所述的方法。
对于Arch,请pacman -S tk
按照 Jabba此处的描述进行使用。
对于RHEL,请使用此处yum install python3-tkinter
amzy-0 所描述的。
上述软件包只能为系统python添加 Tkinter 支持(安装在 中的软件包/usr/bin
,操作系统使用它来运行必要的脚本)。他们无法将 Tkinter 支持添加到从源代码构建的单独 Python 中。这是因为,除了_tkinter
实际的 Tcl/Tk 库之外,在 Python 中使用 Tkinter 还需要一个每次安装的“绑定”库(在 Python 源代码中引用)。系统包不会将此库添加到其他 Python 安装中。
因此,首先安装一个开发Tk 包(例如apt-get install tk-dev
)并尝试重建。
也可以看看:
本地安装 tkinter 和 python(以防sudo
权限不可用)
在缺失的模块上构建 Python 和更多内容(更一般地说是从源代码重建 Python 并填充开发依赖项)
使用brew install python-tk
; 如有必要,请指定 Python 版本,例如brew install python-tk@3.11
.
对于非系统安装,可能需要重新安装并指定应包含 Tkinter 支持,例如brew install python --with-tcl-tk
. 另请参阅:为什么通过 Homebrew 安装的 Python 不包括 Tkinter
通常不可能为PythonAnywhere或Amazon Linux EC2等无头服务器环境安装 Tkinter 或任何其他 GUI 工具包。该代码将在远程服务器上运行,因此没有监视器来显示 GUI;虽然原则上代码可以将命令发送回客户端,然后客户端可以使用该命令来创建 GUI,但通常服务器不会了解客户端的环境。要实现此功能,需要提前设置一些通信协议(例如 X11)。
首先,修复虚拟环境所基于的安装。如果这不能解决问题,请重新创建虚拟环境(并重新安装旧虚拟环境中安装的所有内容)。不幸的是,没有一个干净的方法来解决这个问题。可以通过更改一堆符号链接来解决该问题,但这不受支持。
如果无法修复基本安装(例如,由于没有sudo
系统权限),请考虑安装单独的 Python(例如,通过从源代码编译),确保它安装有 Tkinter 支持,并创建来自 Python的虚拟环境。
一些用户会发现准确了解 Tkinter 系统包含的内容很有用。有几个组成部分:
底层 Tcl/Tk 库,用 C 编写。某些系统可能独立安装 Tcl/Tk,默认情况下无法从 Python 使用。
实现_tkinter
模块,也是用 C 编写的,是 Python 和 Tcl/Tk 之间的接口(“tkinter”意思是“Tk 接口”)。这是一个实现细节,不应直接在 Python 用户代码中导入。(此C 代码可以追溯到 1994 年!)
包tkinter
本身为较低级别的_tkinter
界面提供了包装器,以及ttk
(用于更新的“主题”小部件的单独界面)。
更高级别的组件,例如 IDLE 和turtle
.
理论上,任何给定的安装都可能缺少任何或所有这些组件。对于 Linux 和 MacOS 上的 Python 系统安装,发行版维护者负责确保适当的包(python3-tk
或类似包)将默认情况下缺少的部分安装到适当的位置。
正如Terry Jan Reedy 在 GitHub 上向我解释的那样:当Windows安装程序被告知安装 Tcl/Tk 时,它将为该 Python安装安装该库的单独副本_tkinter
(以及相应的等)。在 Linux 上,Tcl/Tk 通常会随 Linux 一起提供;像这样的包将添加一个使用系统 Tcl/Tk 的包,以及一个包(它会自然地找到并使用实现,使用正常的导入机制)。tkinter
python3-tk
_tkinter
tkinter
_tkinter
由于 Tcl/Tk 安装是针对 Windows“供应”的,因此 Tcl/Tk 版本将取决于 Python 版本。在 Linux 上,它将取决于系统,并且应该可以使用系统包管理器独立于 Python 来升级 Tcl/Tk。请特别注意,较新版本的 Python 可能无法与过时的系统 Tcl/Tk 一起使用。(要检查 Tcl/Tk 版本是否正常安装,请参阅如何确定我的 Linux 计算机上安装了哪个版本的 python3 tkinter?。)
归档时间: |
|
查看次数: |
9813 次 |
最近记录: |