Mtaplotlib AttributeError: объект "module" не имеет атрибута "pyplot"
прежде чем кто-либо скажет "дублировать вопрос" или что-нибудь, пожалуйста, прочитайте, это не то же самое, что другие вопросы.
поэтому, когда я запускаю свою небольшую программу;
python numbers.py
здесь
$ 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
и я использую matplotlib версии 1.2;
/usr/local/lib/python2.7/dist-packages/matplotlib-1.2.0-py2.7-linux-x86_64.egg/
Я пробовал несколько подходов, чтобы заставить его работать;
from matplotlib import pyplot as plt
import matplotlib.pyplot as plt
ни один из них работать. они оба дают одну и ту же ошибку;
$ 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'
что действительно расстраивает, так это то, что у меня есть еще один файл, с from matplotlib import pyplot as plt
вверху, и он отлично работает. Я не вижу никаких причин, почему один будет работать а другой нет...
я тоже пытался изменить имя файла, чтобы это не было numbers.py
но это тоже не сработало.
кто-нибудь сталкивался с этим раньше и исправил? Или знаешь, почему это не работает?
вот полный файл:
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()
1 ответов
вы затеняете системный файл и получаете круговой импорт.
обратите внимание, что первый и последний файл вашей трассировки пытаются импортировать из того же файла.
изменить имя файла на что-то другое (и удалить pyc
file), и он должен работать.
см. Также matplotlib больше не работает из-за интерактивной проблемы у которого была аналогичная проблема.