Mtaplotlib AttributeError: object 'module' does not have attribute 'pyplot'

Before someone says “duplicate question” or anything else, read this is not the same as other questions.

So, when I run my small program,

python numbers.py 

Where

 $ file `which python` /usr/bin/python: symbolic link to 'python2.7' $ file `which python2.7` /usr/bin/python2.7: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x623b662458af705775fcbd2576ca06eaa82bc482, stripped 

and I use matplotlib version 1.2;

 /usr/local/lib/python2.7/dist-packages/matplotlib-1.2.0-py2.7-linux-x86_64.egg/ 

I tried several approaches to make it work;

 from matplotlib import pyplot as plt import matplotlib.pyplot as plt 

none of them work. they both give the same error;

 $ python numbers.py Traceback (most recent call last): File "numbers.py", line 1, in <module> import matplotlib.pyplot as plt File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.2.0-py2.7-linux-x86_64.egg/matplotlib/pyplot.py", line 26, in <module> from matplotlib.figure import Figure, figaspect File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.2.0-py2.7-linux-x86_64.egg/matplotlib/figure.py", line 34, in <module> import matplotlib.colorbar as cbar File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.2.0-py2.7-linux-x86_64.egg/matplotlib/colorbar.py", line 29, in <module> import matplotlib.collections as collections File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.2.0-py2.7-linux-x86_64.egg/matplotlib/collections.py", line 23, in <module> import matplotlib.backend_bases as backend_bases File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.2.0-py2.7-linux-x86_64.egg/matplotlib/backend_bases.py", line 51, in <module> from PIL import Image File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 90, in <module> import numbers File "/home/will/Documents/python/numbers/numbers.py", line 1, in <module> import matplotlib.pyplot as plt AttributeError: 'module' object has no attribute 'pyplot' 

What really upsets is that I have another file with from matplotlib import pyplot as plt on top and it works fine. I see no reason why it would be possible to work, and the other does not ...

I also tried to change the file name, so it was not numbers.py , but that did not work either.

Has anyone come across this before and fixed it? Or do you know why this does not work?

Here is the full file:

 from matplotlib import pyplot as plt def toString(number): if type(number) == float: return floatToString(number) elif type(number) == int: return intToString(number) elif type(number) == complex: return complexToString(number) else: return "NaN" def intToString(number): if number < 0: return "minus " + intToStringPos(abs(number)) else: return intToStringPos(number) def intToStringPos(number): upTo20 = [""] + "one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen".split() tenTimes = "twenty thirty fourty fifty sixty seventy eighty ninety hundred".split() logs = [""] + "thousand million billion trillion quadrillion".split() if len(str(number)) > 3: #split number into groups of three, from the right hand end number = list(reversed(str(number))) groups = list(reversed([int("".join(reversed([number[i+j] for j in range(3) if i+j < len(number)]))) for i in range(0, len(number), 3)])) retString = "" for i, number in enumerate(reversed(groups)): if number == 0: continue elif i == 0 and len(str(number)) < 3: if number != 0: retString = "and " + intToString(number) else: retString = intToString(number) + " " + logs[i] + " " + retString return retString.strip() elif 1000 > number > 99: tens = intToString(int(str(number)[1:])) if tens != "zero": return upTo20[number/100] + " hundred and " + tens else: return upTo20[number/100] elif 100 > number >= 20: return tenTimes[number/10-2] + " " + upTo20[number - 10*(number/10)] elif 0 < number < 20: return upTo20[number] elif number == 0: return "zero" def floatToString(number): integerPart, decimalPart = divmod(number,1) retString = intToString(int(integerPart)) if decimalPart > 0.0: return retString + " point " + " ".join([intToString(int(d)) for d in str(decimalPart)[2:]]) else: return retString def complexToString(number): retString = [] if number.real > 0.0: retString.append(floatToString(number.real)) if number.imag > 0.0: if number.imag == 1: retString.append("j") else: retString.append(floatToString(number.imag) + " j") return " plus ".join(retString) lengths = [] for number in range(1000): print toString(number) lengths.append(len(toString(number))) print lengths plt.plot(range(1000), lengths) plt.pyplot.show() 
+6
source share
1 answer

You obscure the system file and get circular import.

Please note that the first and last file of your trace is trying to import from the same file.

Change your file name to another (and delete the pyc file) and it should work.

Also see matplotlib no longer works due to an interactive issue that had a similar issue.

+4
source

Source: https://habr.com/ru/post/959253/


All Articles