Jupyter vs IPython:Matplotlib - 没有名为 Tkinter 的模块

Posted

技术标签:

【中文标题】Jupyter vs IPython:Matplotlib - 没有名为 Tkinter 的模块【英文标题】:Jupyter vs IPython: Matplotlib - No module named Tkinter 【发布时间】:2018-06-20 08:08:07 【问题描述】:

我在一个名为 OpenQuake 的程序中使用 Python 3.5。当我执行以下行时,我收到一个导入错误“No module name 'tkinter'”。

import matplotlib.pyplot as plt

我安装了 jupyter 并执行了相同的操作,它工作正常。以下是快照。 我使用 IPython(我相信 jupyter 附带)重新检查,以获得完全相同的原始错误和相同的回溯。以下是回溯。

Traceback (most recent call last):
  File "<ipython-input-22-964337a9f103>", line 2, in <module>
    import matplotlib.pyplot as plt
  File "C:\Program Files\OpenQuake Engine\lib\site-packages\matplotlib\pyplot.py", line 114, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "C:\Program Files\OpenQuake Engine\lib\site-packages\matplotlib\backends\__init__.py", line 32, in pylab_setup
    globals(),locals(),[backend_name],0)
  File "C:\Program Files\OpenQuake Engine\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 6, in <module>
    from matplotlib.externals.six.moves import tkinter as Tk
  File "C:\Program Files\OpenQuake Engine\lib\site-packages\matplotlib\externals\six.py", line 90, in __get__
    result = self._resolve()
  File "C:\Program Files\OpenQuake Engine\lib\site-packages\matplotlib\externals\six.py", line 113, in _resolve
    return _import_module(self.mod)
  File "C:\Program Files\OpenQuake Engine\lib\site-packages\matplotlib\externals\six.py", line 80, in _import_module
    __import__(name)
ImportError: No module named 'tkinter'

两种情况下引用的matplotlib模块都是一样的。

总结一下:

    上述代码 sn-p 在使用 Python 和 IPython 时出现导入错误。 代码 sn-p 在 Jupyter 中执行成功。

有人能解释一下为什么会这样吗?

【问题讨论】:

matplotlib error - no module named tkinter的可能重复 请在您的问题中包含回溯而不是图片。 @MaxPowers 如前所述,执行在 Jupyter 中有效,但在 Ipython 或 Python 中无效,所以我认为这不是该问题的重复(与安装有关)。 【参考方案1】:

matplotlib 使用不同的后端。在 Jupyter 中,它通常使用 inlinenotebook。另一方面,IPython 默认使用 TK 后端 (backend_tkagg.py),因此尝试导入未安装的 tkinter。 Jupyter 不需要此后端,因此不会尝试导入它。

Jupyter 在浏览器中显示绘图结果,但 IPython 在终端上运行,需要 TKinter 等 GUI 库才能显示。这使得需要不同的后弯。

【讨论】:

您能否详细说明“backend_tkagg.py 未安装”的含义,因为该文件存在并且它显示在回溯中。根据您的回答,我确实确定 Ipython 的 matplotlib 后端是 TkAgg,而 Jupyter 的后端是 module://ipykernel.pylab.backend_inline。谈到它是如何开发的,我是外行,但为什么 ipython 不能使用相同的module://ipykernel.pylab.backend_inline?如果您可以给我建议或指出正确的方向。 更新了我的答案。

以上是关于Jupyter vs IPython:Matplotlib - 没有名为 Tkinter 的模块的主要内容,如果未能解决你的问题,请参考以下文章

Jupyter和IPython

jupyter 和 ipython的区别

pyenv ipython jupyter

目前在 Jupyter/iPython 中动态更新绘图的正确方法是啥?

目前在 Jupyter/iPython 中动态更新绘图的正确方法是啥?

更改 IPython/Jupyter 笔记本工作目录