Python AttributeError: 'module' object has no attribute 'Serial'
Question:
I’m trying to access a serial port with Python 2.6 on my Raspberry Pi running Debian.
My script named serial.py
tries to import pySerial:
import serial
ser = serial.Serial('/dev/ttyAMA0', 9600)
ser.write("hello world!")
For some reason it refuses to establish the serial connection with this error:
AttributeError: 'module' object has no attribute 'Serial'
When I try to type the same code in the interactive Python interpreter it still doesn’t work.
Strangely, it used to work about a couple hours ago.
What could be the problem? I’ve tried to fix this for a while, installing pySerial again, rewriting my code, double-checking the serial port, etc.
Answers:
You’re importing the module, not the class. So, you must write:
from serial import Serial
You need to install serial
module correctly: pip install pyserial
.
I’m adding this solution for people who make the same mistake as I did.
In most cases: rename your project file serial.py
and delete serial.pyc
if exists, then you can simply do import serial
without the attribute error.
Problem occurs when you import ‘something’ when your python file name is ‘something.py’.
If you are helpless like me, try this:
List all Sub-Modules of “Serial” (or whatever package you are having trouble with) with the method described here: List all the modules that are part of a python package
In my case, the problems solved one after the other.
…looks like a bug to me…
This error can also happen if you have circular dependencies. Check your imports and make sure you do not have any cycles.
I accidentally installed ‘serial’ (sudo python -m pip install serial
) instead of ‘pySerial’ (sudo python -m pip install pyserial
), which lead to the same error.
If the previously mentioned solutions did not work for you, double check if you installed the correct library.
You have installed the incorrect package named ‘serial‘.
- Run
pip uninstall serial
for python 2.x or pip3 uninstall serial
for python 3.x
- Then install pyserial if not already installed by
running pip install pyserial
for python 2.x orpip3 install pyserial
for python 3.x.
Yes this topic is a bit old but i wanted to share the solution that worked for me for those who might need it anyway
As Ali said, try to locate your program using the following from terminal :
sudo python3
import serial
print(serial.__file__)
–> Copy
CTRL+D #(to get out of python)
sudo python3
–>paste/__init__.py
Running __init__.py
will say to your program "ok i’m going to use Serial from python3". My problem was that my python3 program was using Serial from python 2.7
Other solution: remove other python versions
Cao
Tryhard
I’m trying to access a serial port with Python 2.6 on my Raspberry Pi running Debian.
My script named serial.py
tries to import pySerial:
import serial
ser = serial.Serial('/dev/ttyAMA0', 9600)
ser.write("hello world!")
For some reason it refuses to establish the serial connection with this error:
AttributeError: 'module' object has no attribute 'Serial'
When I try to type the same code in the interactive Python interpreter it still doesn’t work.
Strangely, it used to work about a couple hours ago.
What could be the problem? I’ve tried to fix this for a while, installing pySerial again, rewriting my code, double-checking the serial port, etc.
You’re importing the module, not the class. So, you must write:
from serial import Serial
You need to install serial
module correctly: pip install pyserial
.
I’m adding this solution for people who make the same mistake as I did.
In most cases: rename your project file serial.py
and delete serial.pyc
if exists, then you can simply do import serial
without the attribute error.
Problem occurs when you import ‘something’ when your python file name is ‘something.py’.
If you are helpless like me, try this:
List all Sub-Modules of “Serial” (or whatever package you are having trouble with) with the method described here: List all the modules that are part of a python package
In my case, the problems solved one after the other.
…looks like a bug to me…
This error can also happen if you have circular dependencies. Check your imports and make sure you do not have any cycles.
I accidentally installed ‘serial’ (sudo python -m pip install serial
) instead of ‘pySerial’ (sudo python -m pip install pyserial
), which lead to the same error.
If the previously mentioned solutions did not work for you, double check if you installed the correct library.
You have installed the incorrect package named ‘serial‘.
- Run
pip uninstall serial
for python 2.x orpip3 uninstall serial
for python 3.x - Then install pyserial if not already installed by
runningpip install pyserial
for python 2.x orpip3 install pyserial
for python 3.x.
Yes this topic is a bit old but i wanted to share the solution that worked for me for those who might need it anyway
As Ali said, try to locate your program using the following from terminal :
sudo python3
import serial
print(serial.__file__)
–> Copy
CTRL+D #(to get out of python)
sudo python3
–>paste/__init__.py
Running __init__.py
will say to your program "ok i’m going to use Serial from python3". My problem was that my python3 program was using Serial from python 2.7
Other solution: remove other python versions
Cao
Tryhard