已安装python3-tk仍报_tkinter模块缺失错误,求解决方案
解决matplotlib依赖tkinter引发的导入错误(已安装python3-tk仍无效)
问题梳理
你遇到的核心问题是:项目本身不需要tkinter,但运行时matplotlib默认调用tkinter后端,导致_tkinter模块找不到的报错。尽管你已经通过sudo apt-get install python3-tk安装了最新包,但问题依旧。从错误栈和安装信息来看,系统安装的python3-tk版本与你virtualenv中使用的Python版本不匹配是关键矛盾,同时也可以通过切换matplotlib后端彻底规避tk依赖。
错误信息回顾
Traceback (most recent call last): File "/usr/lib/python3.5/tkinter/__init__.py", line 36, in import _tkinter ImportError: No module named '_tkinter' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/manuelanayantarajeyaraj/PycharmProjects/ChatbotWord2Vec/main.py", line 2, in from matplotlib import pyplot as plt File "/home/manuelanayantarajeyaraj/usr/myProject/my_project/lib/python3.5/site-packages/matplotlib/pyplot.py", line 115, in _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup() File "/home/manuelanayantarajeyaraj/usr/myProject/my_project/lib/python3.5/site-packages/matplotlib/backends/__init__.py", line 62, in pylab_setup [backend_name], 0) File "/home/manuelanayantarajeyaraj/usr/myProject/my_project/lib/python3.5/site-packages/matplotlib/backends/backend_tkagg.py", line 4, in from . import tkagg # Paint image to Tk photo blitter extension. File "/home/manuelanayantarajeyaraj/usr/myProject/my_project/lib/python3.5/site-packages/matplotlib/backends/tkagg.py", line 5, in from six.moves import tkinter as Tk File "/home/manuelanayantarajeyaraj/usr/myProject/my_project/lib/python3.5/site-packages/six.py", line 92, in __get__ result = self._resolve() File "/home/manuelanayantarajeyaraj/usr/myProject/my_project/lib/python3.5/site-packages/six.py", line 115, in _resolve return _import_module(self.mod) File "/home/manuelanayantarajeyaraj/usr/myProject/my_project/lib/python3.5/site-packages/six.py", line 82, in _import_module __import__(name) File "/usr/lib/python3.5/tkinter/__init__.py", line 38, in raise ImportError(str(msg) + ', please install the python3-tk package') ImportError: No module named '_tkinter', please install the python3-tk package
版本不匹配验证
从你的安装输出可见,系统安装的python3-tk是3.6.5版本,但你的virtualenv使用的是Python3.5,两者版本不兼容,这是报错的核心原因:
sudo apt-get install python3-tk
输出片段:
Reading package lists... Done Building dependency tree Reading state information... Done python3-tk is already the newest version (3.6.5-3~16.04.york0.2). ...
解决方案
方案1:安装对应Python3.5版本的python3-tk(匹配版本)
直接安装Python3.5对应的tk包,解决版本兼容问题:
sudo apt-get install python3.5-tk
安装完成后,重启你的virtualenv,再运行项目即可。
方案2:切换matplotlib后端(彻底规避tk依赖,推荐)
既然你的项目不需要tkinter,直接修改matplotlib的后端为非tk类型,比如Agg(适合生成静态图片,无交互需求)、SVG等,有两种设置方式:
临时设置(仅当前脚本生效)
在代码最开头添加以下配置,先设置后端再导入pyplot:
import matplotlib matplotlib.use('Agg') # 选择无需tk的后端 from matplotlib import pyplot as plt
永久设置(全局生效)
找到matplotlib的配置文件matplotlibrc,执行以下命令获取路径:
python -c "import matplotlib; print(matplotlib.matplotlib_fname())"
打开该文件,找到backend一行,修改为:
backend : Agg
保存后,所有matplotlib的调用都会默认使用该后端。
方案3:重新编译Python以包含tkinter支持(针对源码编译的Python)
如果你的virtualenv使用的是源码编译的Python3.5,可能编译时未包含tkinter支持,需要重新编译:
- 先安装tk的开发依赖:
sudo apt-get install tk-dev - 重新编译Python3.5,确保加上
--with-tk参数:./configure --with-tk make && sudo make install - 重新创建virtualenv并安装依赖。
内容的提问来源于stack exchange,提问作者Nayantara Jeyaraj
相关产品推荐
相关产品推荐

