在Python3下運(yùn)行Matplotlib之時(shí)丛塌,提示No module named 'tkinter'這個(gè)問題商佑,下面記錄下解決過程岳瞭,并嘗試分析過程中的解決思路利弊得失欠痴,以資后效,這里重點(diǎn)提示需要關(guān)注錯(cuò)誤信息的分析咧虎,這個(gè)是第一現(xiàn)場卓缰。
環(huán)境介紹
任何技術(shù)問題的出現(xiàn)以及修復(fù)都是依賴于系統(tǒng)環(huán)境以及特定版本的,這里首先描述如下:
Ubuntu: 18.04
tkinter的問題描述
原程序中基于matplotlib來進(jìn)行繪圖操作砰诵,其中在運(yùn)行過程中征唬,報(bào)出來了錯(cuò)誤信息。由于原程序大部分無關(guān)問題本身茁彭,且日志本身比較多总寒,這里僅僅截取關(guān)鍵信息:
import tkinter?as Tk
ModuleNotFoundError: No module named 'tkinter'
問題初步分析
用過python的朋友都知道,碰到類似的問題理肺,比如import Error摄闸,大概率情況下都是某個(gè)包未安裝,故第一反應(yīng)就是某個(gè)包缺失了妹萨,于是首先進(jìn)行了包和類庫的查詢:
linuxidc@linuxidc:~$ pip3 search tkinter
結(jié)果發(fā)現(xiàn)大量的包年枕,被匹配到,其中若干相關(guān)的包有tkinter眠副,這些信息基本上沒有幫助画切。
..................
tkinter.help (2.0) - Small Preview of Tkinter Widgets
tkinter3000 (1.1-20051211) - Widget Construction Kit for Tkinter
tkinterhtml (0.7) - Python wrapper for Tkhtml3 (http://tkhtml.tcl.tk/)
tkinterquickhelper (1.5.18) - Helpers for tkinter, extra windows.
tkintertable (1.2) - Extendable table class for Tkinter
.......................
于是嘗試直接安裝tkinter,結(jié)果沒有發(fā)現(xiàn)tkinter包
linuxidc@linuxidc:~$?pip3 install tkinter
Collecting tkinter
Exception:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/usr/lib/python3/dist-packages/pip/commands/install.py", line 353, in run
wb.build(autobuilding=True)
File "/usr/lib/python3/dist-packages/pip/wheel.py", line 749, in build
self.requirement_set.prepare_files(self.finder)
File "/usr/lib/python3/dist-packages/pip/req/req_set.py", line 380, in prepare_files
ignore_dependencies=self.ignore_dependencies))
File "/usr/lib/python3/dist-packages/pip/req/req_set.py", line 554, in _prepare_file
require_hashes
File "/usr/lib/python3/dist-packages/pip/req/req_install.py", line 278, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "/usr/lib/python3/dist-packages/pip/index.py", line 465, in find_requirement
all_candidates = self.find_all_candidates(req.name)
File "/usr/lib/python3/dist-packages/pip/index.py", line 423, in find_all_candidates
for page in self._get_pages(url_locations, project_name):
File "/usr/lib/python3/dist-packages/pip/index.py", line 568, in _get_pages
page = self._get_page(location)
File "/usr/lib/python3/dist-packages/pip/index.py", line 683, in _get_page
return HTMLPage.get_page(link, session=self.session)
File "/usr/lib/python3/dist-packages/pip/index.py", line 795, in get_page
resp.raise_for_status()
File "/usr/share/python-wheels/requests-2.18.4-py2.py3-none-any.whl/requests/models.py", line 935, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://pypi.org/simple/tkinter/
什么是tkinter囱怕, tcl ,tk
tkinter其實(shí)是Python調(diào)用tcl程序的標(biāo)準(zhǔn)Python程序霍弹,可以通過這個(gè)interface調(diào)用tcl的程序,因?yàn)樵诖蠖鄶?shù)的unix系統(tǒng)中都內(nèi)置了很多的tcl程序和命令娃弓。
Tcl 是“工具控制語言(Tool Command Language)”的縮寫典格,其面向?qū)ο鬄閛tcl語言。Tk 是 Tcl“圖形工具箱”的擴(kuò)展台丛,它提供各種標(biāo)準(zhǔn)的 GUI 接口項(xiàng)耍缴,以利于迅速進(jìn)行高級應(yīng)用程序開發(fā)。
于是挽霉,執(zhí)行terminal 命令:
linuxidc@linuxidc:~/linuxidc.com$?python3 -m tkinter
如果執(zhí)行正確的話防嗡,可以看到如下界面指令,這里主要是指在Linux的桌面系統(tǒng)下:
嘗試解決問題
在網(wǎng)絡(luò)上初次搜索之后侠坎,發(fā)現(xiàn)有人提示說python-tk/python3-tk的類庫需要在操作系統(tǒng)層面進(jìn)行安裝蚁趁。本次案例以Ubuntu為例, 查詢其是否安裝:
linuxidc@linuxidc:~$?sudo apt search python3-tk
[sudo] linuxidc 的密碼:
正在排序... 完成
全文搜索... 完成
python3-tk/bionic-updates 3.6.7-1~18.04 amd64
Tkinter - Writing Tk applications with Python 3.x
python3-tk-dbg/bionic-updates 3.6.7-1~18.04 amd64
Tkinter - Writing Tk applications with Python 3.x (debug extension)
python3-tksnack/bionic,bionic 2.2.10.20090623-dfsg-6 all
Sound extension to Tcl/Tk and Python/Tkinter - Python 3.x library
如果沒有安裝实胸,則需要執(zhí)行他嫡,安裝指令:
(Ubuntu)
linuxidc@linuxidc:~$?sudo apt install python3-tk
(CentOS)
yum install python3-tk
在安裝完成之后番官,重新執(zhí)行程序,然后報(bào)出同樣的錯(cuò)誤钢属,問題仍然存在徘熔。
r如果發(fā)現(xiàn)有信息說,需要安裝tk的開發(fā)類庫淆党,直接進(jìn)行安裝:
sudo apt install tk-dev (Ubuntu/Debian)
yum install tk-devel (CentOS)
到此問題解決酷师,記錄以分享。