2021-05-12 14:32:11
Python3下提示No module named 'tkinter'"問題解決
在Python3下執行Matplotlib之時,提示No module named 'tkinter'這個問題,下面記錄下解決過程,並嘗試分析過程中的解決思路利弊得失,以資後效,這裡重點提示需要關注錯誤資訊的分析,這個是第一現場。
環境介紹
任何技術問題的出現以及修復都是依賴於系統環境以及特定版本的,這裡首先描述如下:
Ubuntu: 18.04
tkinter的問題描述
原程式中基於matplotlib來進行繪圖操作,其中在執行過程中,報出來了錯誤資訊。由於原程式大部分無關問題本身,且紀錄檔本身比較多,這裡僅僅擷取關鍵資訊:
import tkinter as Tk
ModuleNotFoundError: No module named 'tkinter'
問題初步分析
用過python的朋友都知道,碰到類似的問題,比如import Error,大概率情況下都是某個包未安裝,故第一反應就是某個包缺失了,於是首先進行了包和類庫的查詢:
linuxidc@linuxidc:~$ pip3 search tkinter
結果發現大量的包,被匹配到,其中若干相關的包有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,結果沒有發現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其實是Python呼叫tcl程式的標準Python程式,可以通過這個interface呼叫tcl的程式,因為在大多數的unix系統中都內建了很多的tcl程式和命令。
Tcl 是“工具控制語言(Tool Command Language)”的縮寫,其物件導向為otcl語言。Tk 是 Tcl“圖形工具箱”的擴充套件,它提供各種標準的 GUI 介面項,以利於迅速進行高階應用程式開發。
於是,執行terminal 命令:
linuxidc@linuxidc:~/linuxidc.com$ python3 -m tkinter
如果執行正確的話,可以看到如下介面指令,這裡主要是指在Linux的桌面系統下:
嘗試解決問題
在網路上初次搜尋之後,發現有人提示說python-tk/python3-tk的類庫需要在作業系統層面進行安裝。本次案例以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
如果沒有安裝,則需要執行,安裝指令:
(Ubuntu)
linuxidc@linuxidc:~$ sudo apt install python3-tk
(CentOS)
yum install python3-tk
在安裝完成之後,重新執行程式,然後報出同樣的錯誤,問題仍然存在。
r如果發現有資訊說,需要安裝tk的開發類庫,直接進行安裝:
sudo apt install tk-dev (Ubuntu/Debian)
yum install tk-devel (CentOS)
到此問題解決,記錄以分享。
相關文章