Python AttributeError: объект 'module' не имеет атрибута 'Serial'

Я пытаюсь получить доступ к последовательному порту с Python 2.6 на моем малине Pi, работающем под Debian. Мой script с именем serial.py пытается импортировать pySerial:

import serial
ser = serial.Serial('/dev/ttyAMA0', 9600)
ser.write("hello world!")

По какой-то причине он отказывается устанавливать последовательное соединение с этой ошибкой:

AttributeError: 'module' object has no attribute 'Serial'

Когда я пытаюсь ввести один и тот же код в интерактивном интерпретаторе Python, он все равно не работает.

Как ни странно, он работал примерно пару часов назад.

В чем может быть проблема? Я попытался исправить это некоторое время, снова установив pySerial, переписав мой код, дважды проверив последовательный порт и т.д.

Спасибо заранее!

Ответ 1

Вы импортируете модуль, а не класс. Итак, вы должны написать: from serial import serial

Ответ 2

Я добавляю это решение для людей, которые совершают ту же ошибку, что и я.

В большинстве случаев: переименуйте файл проекта "serial.py" и удалите serial.pyc, если он существует, тогда вы можете выполнить простой "импортный серийный номер" без ошибки атрибута.

Проблема возникает, когда вы импортируете "что-то", когда ваше имя файла python "something.py".

Ответ 3

Я случайно установил "serial" (sudo python -m pip install serial) вместо "pySerial" (sudo python -m pip install pyserial), что приводит к той же ошибке.

Если ранее упомянутые решения не сработали для вас, дважды проверьте, установлена ​​ли ваша библиотека.

Ответ 4

Если вы беспомощны, как я, попробуйте следующее:

Список всех субмодулей "Serial" (или любого другого пакета, с которым вы столкнулись) с помощью метода, описанного здесь: Список всех модулей, входящих в пакет python

В моем случае проблемы решаются один за другим.

... выглядит как ошибка для меня...

Ответ 5

Эта ошибка может также произойти, если у вас есть круговые зависимости. Проверьте свой импорт и убедитесь, что у вас нет циклов.

Ответ 6

Эта проблема связана с тем, что ваш proyect называется serial.py, а импортированная библиотека также является серийным номером, измените имя и все.