Python下Nomodulenamed_tkinter问题解决过程分析
引⾔:在Python3下运⾏Matplotlib之时,碰到了"No module named _tkinter“的问题,花费数⼩时进⾏研究解决,这⾥讲整个过程记录下来,并尝试分析过程中的解决思路利弊得失,以资后效,这⾥重点提⽰需要关注错误信息的分析,这个是第⼀现场。
环境介绍
任何技术问题的出现以及修复都是依赖于系统环境以及特定版本的,这⾥⾸先描述如下:
Ubuntu: 17.10
Python: 3.6.1  基于virutalenv来切换不同的Python环境
tkinter的问题描述
原程序中基于matplotlib来进⾏绘图操作,其中在运⾏过程中,报出来了错误信息。由于原程序⼤部分⽆关问题本⾝,且⽇志本⾝⽐较多,这⾥仅仅截取关键信息:
import _tkinter # If this fails your Python may not be configured for Tk
ImportError: No module named _tkinter
问题初步分析
⽤过python的朋友都知道,碰到类似的问题,⽐如import Error,⼤概率情况下都是某个包未安装,故第⼀反应就是某个包缺失了,于是⾸先进⾏了包和类库的查询:
pip3 search tkinter
结果发现⼤量的包,被匹配到,其中若⼲相关的包有tkinter,这些信息基本上没有帮助。
..................
tkinter.help (2.0) - Small Preview of Tkinter Widgets
tkinter3000 (1.1-20051211) - Widget Construction Kit for Tkinter
tkinterquickhelper (1.5.18) - Helpers for tkinter, extra windows.
tkintertable (1.2) - Extendable table class for Tkinter
.......................
于是尝试直接安装tkinter,结果没有发现tkinter包
>> pip3 install tkinter
Collecting tkinter
Could not find a version that satisfies the requirement tkinter (from versions: )
No matching distribution found for tkinter
什么是tkinter, tcl ,tk
The tkinter package (“Tk interface”) is the standard Python interface to the Tk GUI toolkit. Both Tk and tkinter are available on most Unix platforms, as well as on Windows systems. (Tk itself is not part of
Python; it is maintained at ActiveState.) You can check that tkinter is properly installed on your system by running python -m tkinter from the command line; this should open a window demonstrating a simple Tk interface.
tkinter其实是Python调⽤tcl程序的标准Python程序,可以通过这个interface调⽤tcl的程序,因为在⼤多数的unix系统中都内置了很多的tcl程序和命令。
Tcl 是“⼯具控制语⾔(Tool Command Language)”的缩写,其⾯向对象为otcl语⾔。Tk 是 Tcl“图形⼯具箱”的扩展,它提供各种标准的GUI 接⼝项,以利于迅速进⾏⾼级应⽤程序开发。
于是,执⾏terminal 命令:
python -m tkinter
如果执⾏正确的话,可以看到如下界⾯指令,这⾥主要是指在Linux的桌⾯系统下:
尝试解决问题-1
在⽹络上初次搜索之后,发现有⼈提⽰说python-tk/python3-tk的类库需要在操作系统层⾯进⾏安装。本次案例以Ubuntu为例, 查询其是否安装:
>> sudo apt search python3-tk
正在排序... 完成
全⽂搜索... 完成
python3-tk/artful,now 3.6.3-0ubuntu1 amd64 [已安装]
Tkinter - Writing Tk applications with Python 3.x
python3-tk-dbg/artful 3.6.3-0ubuntu1 amd64
Tkinter - Writing Tk applications with Python 3.x (debug extension)
python3-tksnack/artful,artful,now 2.2.10.20090623-dfsg-6 all [已安装]
ubuntu怎么安装python
Sound extension to Tcl/Tk and Python/Tkinter - Python 3.x library
上述是已经安装的显⽰信息,如果没有安装,则需要执⾏,安装指令:
>> sudo apt install python3-tk  (Ubuntu)
>> yum install python3-tk    (Centos)
在安装完成之后,重新执⾏程序,然后报出同样的错误,问题仍然存在。
然后有发现有信息说,需要安装tk的开发类库,于是,在查询之后未安装之后,直接进⾏安装:
>> sudo apt install tk-dev (Ubuntu/Debian)
>> yum install tk-devel (CentOS)
在安装之后,重新执⾏程序,错误仍然存在。
尝试解决问题-2
在stackoverflow上搜索⼀番之后,发现有⼈提⽰说,某些情况下是tcl/tk安装不完整造成的,于是就重新下来了tcl/tk的源代码包:然后分别下来两者源代码,加压缩之后,切⼊源代码⽬录:
>> configure
>> make or make test
>> sudo make install
在重新安装tck/tk之后,重新执⾏代码,问题依然存在。
最终解决问题
在尝试了若⼲次之后,⾃我感觉该安装和设置的选项都做了,怎么问题依然存在呢?我忽然发觉提⽰错误信息中的第⼀句关键信息:
# If this fails your Python may not be configured for Tk
或许这⾥的问题,根本不是tkinter没有安装,或者被正确安装完成,⽽是没有被正确的配置好。⽬前tcl/tk的内容都已经安装好了,只是在python中没有配置好,但是python3-tk之类的都已经安装了,但是问题并没有被解决。如果这样,那就重新安装Python运⾏环境吧。
由于⽬前的*unix系统都是基于python 2.x系列的,如果需要使⽤Python3则需要⾃⾏进⾏代码的编译安装,于是重新基于源代码进⾏了编译和安装, 然后进⼊python的命令⾏,
>> import tkinter
提⽰可以正确加载。于是重新执⾏了之前的原程序,可以正确输出结果了。问题到此为⽌,已经被正确的解决。
过程总结分析
这⾥讲其中的得失点进⾏⼀下总结:
1.  tkinter是⼀个python的接⼝类库,⽤以调⽤tcl/tk程序,故⼀般在操作系统层⾯会有相应的类库安装,⽽⾮仅仅依靠pip3来安装相应的python类库,⽐如, python3-tk
2. devel库的安装,在*unix系统中,在进⾏开发之中,很多情况下是需要devel类库安装的,这个是⼀个⼤概率的规则。
3. 某些情况下,会出现安装不完整的情况或者安装缺失某些类库的情况。这个时候可以考虑重新覆盖安装,⽐如tcl/tk, python3的重新安装
4. 重视错误信息的分析和⽅向性指引。 在本案例中,关键的提⽰信息有2个部分,其⼀,moulde未安装或没有到,则从安装类库的⽅向进⾏尝试解决。 其⼆, 假定包已经安装,但是未被正确的配置好。 笔者在解决问题之时,⾸选了思路⼀来进⾏解决;在碰到各种尝试失败之后,才不得不转向其⼆的思路来解决。如果从两个⽅向同时来解决的话,或者这个问题可以被更快的解决。
笔者解决这个问题花费了⼤约3~4个⼩时左右。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。