Reputation: 17468
install it by pip
import gzip, binascii, struct, numpy
import matplotlib.pyplot as plt
with gzip.open(test_data_filename) as f:
# Print the header fields.
for field in ['magic number', 'image count', 'rows', 'columns']:
# struct.unpack reads the binary data provided by f.read.
# The format string '>i' decodes a big-endian integer, which
# is the encoding of the data.
print(field, struct.unpack('>i', f.read(4))[0])
# Read the first 28x28 set of pixel values.
# Each pixel is one byte, [0, 255], a uint8.
buf = f.read(28 * 28)
image = numpy.frombuffer(buf, dtype=numpy.uint8)
# Print the first few values of image.
print('First 10 pixels:', image[:10])
ImportErrorTraceback (most recent call last)
<ipython-input-9-8ba574e10b9a> in <module>()
3
4 import gzip, binascii, struct, numpy
----> 5 import matplotlib.pyplot as plt
6
7
/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py in <module>()
112
113 from matplotlib.backends import pylab_setup
--> 114 _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
115
116 _IP_REGISTERED = None
/usr/lib64/python2.7/site-packages/matplotlib/backends/__init__.pyc in pylab_setup()
30 # imports. 0 means only perform absolute imports.
31 backend_mod = __import__(backend_name,
---> 32 globals(),locals(),[backend_name],0)
33
34 # Things we pull in from all backends
/usr/lib64/python2.7/site-packages/matplotlib/backends/backend_tkagg.py in <module>()
4
5 from matplotlib.externals import six
----> 6 from matplotlib.externals.six.moves import tkinter as Tk
7 from matplotlib.externals.six.moves import tkinter_filedialog as FileDialog
8
/usr/lib64/python2.7/site-packages/matplotlib/externals/six.pyc in load_module(self, fullname)
197 mod = self.__get_module(fullname)
198 if isinstance(mod, MovedModule):
--> 199 mod = mod._resolve()
200 else:
201 mod.__loader__ = self
/usr/lib64/python2.7/site-packages/matplotlib/externals/six.pyc in _resolve(self)
111
112 def _resolve(self):
--> 113 return _import_module(self.mod)
114
115 def __getattr__(self, attr):
/usr/lib64/python2.7/site-packages/matplotlib/externals/six.pyc in _import_module(name)
78 def _import_module(name):
79 """Import module, returning the module after the last dot."""
---> 80 __import__(name)
81 return sys.modules[name]
82
ImportError: No module named Tkinter
Python 2.7.5 (default, Sep 15 2016, 22:37:39)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named Tkinter
>>>
There is a Jupyter Notebook Server running a on a remote CentOS Server, and I access the notebook via my local web-browser, and when I type the above code in the jupyter notebook, the bug occurs!!!
How can fix this bug? Thank you!
Upvotes: 0
Views: 2192
Reputation: 17468
This is a easy but annoyed question. By default, the Tkinter
(or tkinter
) would not be installed in the Linux default Python's package dir. So, on CentOS, just install the Tkinter
yum -y install tkinter
When I try toimport Tkinter
, import error occurred. So, I am sure that the Tkinter
(or tkinter
) package hadn't be installed.
Here is another question on this and it helps to solve my problem too.
Click python3-importerror-no-module-named-tkinter-on-ubuntu
Upvotes: -1
Reputation: 12590
Matplotlib can use several backends, some of them require an GUI toolkit. It looks like yor matplotlib install is configured to use the TkAgg backend by default.
Usually servers do not have GUI toolkits installed (and it would not make much sense anyway) so matplotlib should be configured to use a non-gui backend. For example you can specify backend : Agg
in the matplotlibrc file (see the link above for details).
If you are unable to do this on the server you can create a custom matplotlibrc in the same directory as your notebook. Or just set the backend in your code. In a notebook this should render your plots the same as the TkAgg backend and it does not need Tkinter:
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
Upvotes: 4