给python安装tkinter模块(及各种问题的解决:如 ModuleNotFoundError: No module named ‘_tkinter’)

文章目录

    • 前言
    • 1. 环境
    • 2. 问题描述
    • 3. 给Python2.7安装tkinter
    • 4. 给python3.6.3安装tkinter(注意:这里失败了,但是过程值得记录一下)
    • 5. [可行方案] 安装python3.5,并且给其安装tkiner模块
    • 6. 小结
    • 参考文献

前言

如题,本文旨在解决python报错问题:ModuleNotFoundError: No module named '_tkinter';换言之,本文记录在Ubuntu系统上如何给python的不同版本(包含python2和python3)安装tkinter模块。

1. 环境

操作系统:

  • Ubuntu14.04

已有的python版本:

  • Python2.7(系统自带)
  • Python3.4(系统自带)
  • Python3.6.3(从Python官网下载的源代码(source folder)编译而来的python版本)

Python编辑器:

  • VS code (还是挺好用的)

为什么要用到tkinter模块?
答: 因为在Ubuntu下VSCode中写python代码的时候,如果用到matplotlib模块作图,会无法显示图片弹窗(即plt.show()没用),只能委曲求全选择plt.savefig(path, 'plot.png')存到本地来看。
可能的原因是没有安装tkinter模块。
我不想委曲求全,于是开始寻求解决方案。

2. 问题描述

我在VS code里面写了这样的代码,并在python3.6下运行:

import matplotlib
matplotlib.use('TkAgg')  # vscode
import matplotlib.pyplot as plt 
import numpy as np

x = np.linspace(-3, 3, 50)
y1 = 2*x + 1

plt.plot(x, y1)
plt.show()

然而,报错如下:

ModuleNotFoundError: No module named ‘_tkinter’

原因:python3.6没有tkinter模块。

以下为解决方案。(虽然是用的python3,但顺手给python2.7也装了tkinter)

3. 给Python2.7安装tkinter

这个较为简单,参考 [1] 即可:

1)安装tkinter:
在终端运行:

sudo apt-get update
sudo apt-get install python-tk

2)验证是否安装tkinter模块:
在VScode下写如下代码并运行:

import Tkinter  # 注意,Python2下面的Tkinter首字母要大写的

Tkinter._test()

如果成功安装,则能够看到下图这个弹窗:
给python安装tkinter模块(及各种问题的解决:如 ModuleNotFoundError: No module named ‘_tkinter’)_第1张图片

4. 给python3.6.3安装tkinter(注意:这里失败了,但是过程值得记录一下)

注意:这里失败了,但是整个过程是我在这上面耗时最久的地方,所以我认为有必要记录一下。(这章节里面的指令都是可以运行的,我都试过,目测不会造成什么问题。如果怕出问题或者想直接找到解决方案的话,可以直接跳到第5节:可行方案。)

1)先参考[1],利用apt-get指令安装适用于python3的tkinter
在终端输入:

sudo apt-get update
sudo apt-get install python3-tk

2)验证是否对python3.6.3有效
在VScode中写如下代码并运行:

import tkinter  # 注意: python3版本下import tkinter的时候,tkinter首字母小写
tkinter._test()

然而,依旧报错:

ModuleNotFoundError: No module named ‘_tkinter’

3)查看python3-tk的版本
此时在终端输入dpkg --list | grep python3-tk 查看一下python3-tk的版本,输出信息如下:

apr@apr:~$ dpkg --list | grep python3-tk
ii python3-tk 3.4.3-1~14.04.2  amd64  Tkinter - Writing Tk applications with Python 3.x

说明这时候安装的python3-tk是面向python3.4版本的。可惜可惜。

4)切换到python3.4
此时在VSCode下切换到python3.4版本,运行同样的python代码:

import tkinter 
tkinter._test()

果然可以正常运行且有预期的弹窗出现。

5)总结
由于我python3.6.3 是从源文件夹安装的,其可执行的python路径在/usr/local/bin/python3, 系统自带的python2和3都是在/usr/bin/文件夹下。而且可能系统自带的python3.4优先级比3.6高,所以python3-tk直接就针对python3.4了。但我认为最可能的原因是:Ubuntu14.04的apt源中只有针对python3.4的python3-tk安装包。(Sadly)

6)一系列尝试:(虽然失败,也记录下其中曲折)

  • (1)我在python3.6.3的source folder下重新运行了一遍:
./configure
sudo make clean
sudo make 
sudo make test
sudo make install

么得用呢。

  • (2)把/usr/bin/python3从指向python3.4改为指向python3.6.3,利用的是:sudo update-alternatives --install xxxsudo update-alternatives --config python3指令。
    参考了:How to Install Python 3.6.1 in Ubuntu 16.04 LTS
    也么得用。
  • (3)去tkinter官网:https://tkdocs.com/tutorial/install.html找到其章节:Installing Tk on Linux,并尝试下载:https://platform.activestate.com/dalewushuang/ActiveTcl-8.5/distributions?platformID=eef02e93-f4a9-5cca-a131-a388ecf57442 下面的ActiveTcl-8.5.19.8519-x86_64-linux-glibc-2.5-403583.tar.gz,然而:网速太慢,太难下载,而且好像还有很多其他各种步骤,而且还要重新编译python3.6.3的源码。这可也太麻烦了。
    所以溜了。
  • (4)既然python3.4装好了tkinter,我想直接用python3.4得了。然而,python3.4下不支持:python3.4 -m pip install seaborn等等指令(提示需要python3.5及以上版本)。那就太不方便了,所以我放弃了回退版本。
  • (5)参考[2]:在终端运行如下指令:
sudo add-apt-repository ppa:deadsnakes/ppa #添加一个个人仓库,里面有适合python3.6版本的tkinter模块
sudo apt-get update
sudo apt-get install python3.6-tk

然而,我发现VScode中多了一个Python版本:
给python安装tkinter模块(及各种问题的解决:如 ModuleNotFoundError: No module named ‘_tkinter’)_第2张图片
所以,这个python3.6-tk只支持python3.6.8,不支持python3.6.3,太难了。
然后我想,要不直接用python3.6.8版本就好啦。但是:1)我没找到卸载python3.6.3的方法(貌似可以用locate python3.6 | xargs rm -rf,大概是这样的指令,但是我怕无法恢复,所以不敢用);2)python3.6.8呢,又是minimal版本的好像,我也没找到他的dist-packages文件夹,也没找到他的pip3,反正就是各种没找到,好像也install不了模块,所以也用不了。
很尴尬。

  • (6)想重新安装python3.6:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6

失败了,提示已经有python3.6了。

以上皆为失败尝试。目前来看,是没办法给python3.6.3安装tkinter模块了。但是我最后找到了一个解决方案,请看以下章节

5. [可行方案] 安装python3.5,并且给其安装tkiner模块

部分可参考[3]。

1)安装python3.5

sudo add-apt-repository ppa:deadsnakes
sudo apt-get update
sudo apt-get install python3.5

2)安装适用于python3.5版本的tkinter模块

sudo add-apt-repository ppa:deadsnakes/ppa #添加一个个人仓库,里面有适合python3.6版本的tkinter模块
sudo apt-get update
sudo apt-get install python3.5-tk

3)验证tkinter是否安装成功:

import tkinter 
tkinter._test()

弹窗已出,成功啦。

4)用pip安装其他的作图相关模块,比如seaborn:

python3.5 -m pip install --user seaborn

备注:
python3.5安装好之后好像还要安装pip。(我也记不得了,应该问题不大),这里如果要装的话,在终端运行:

wget https://bootstrap.pypa.io/get-pip.py
python3.5 get-pip.py  # 注意:这个py文件好像只支持python3.5及以上的版本。所以python3.4确实比较老了。

参考:How to install pip with Python 3?

6. 小结

没啥好说的,光是这篇博客都花了1个小时。整个过程,至少3+小时。

由于整个下午都在和这个问题“杠着”,一直到5点都没找到解决方案,但是在这个过程中也在不断熟悉ubuntu下面的python的各种相关操作,所以一直到5点多准备溜了之前,终于给找到了一个可行方案,也是很不容易了。故而有一个感悟:
无数的经验、经历告诉我,只要坚持下去,一定能在有限的时间内找到解决方案(或者可替代的方案)

所以还是得继续努力,要敢于钻研。

参考文献

  • [1] Installing tkinter on ubuntu 14.04
  • [2] How do I install Python 3.6 using apt-get?
  • [3] How to replace Python 3.4.3 by 3.5

你可能感兴趣的:(PHD,Cand1-2)