首頁 > 軟體

Python3下提示No module named 'tkinter'"問題解決

2020-06-16 16:37:25

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)

到此問題解決,記錄以分享。


IT145.com E-mail:sddin#qq.com