Python AttributeError:’module’对象没有属性’Serial’

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

本问题已经有最佳答案,请猛点这里访问。

我正在尝试使用运行debian的RaspberryPi上的python2.6访问一个串行端口。我的脚本serial.py试图导入pyserial:

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

由于某种原因,它拒绝与此错误建立串行连接:

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

当我试图在交互式Python解释器中键入相同的代码时,它仍然不起作用。

奇怪的是,它在几个小时前就开始工作了。

有什么问题?我尝试了一段时间来修复这个问题,再次安装pyserial,重写代码,重新检查串行端口等。

事先谢谢!


我要为犯同样错误的人添加这个解决方案。

在大多数情况下:重命名项目文件'serial.py'并删除serial.pyc(如果存在),然后可以执行简单的'import serial',而不出现属性错误。

当python文件名为"something.py"时,导入"something"时会出现问题。


我不小心安装了'serial'(sudo python -m pip install serial)而不是'pyserial'(sudo python -m pip install pyserial),这导致了同样的错误。

如果前面提到的解决方案对您不起作用,请仔细检查是否安装了正确的库。


您正在导入模块,而不是类。所以,你必须写:

1
from serial import Serial

您需要正确安装serial模块:pip install pyserial


您安装了名为"serial"的不正确的包。

  • 为python 2.x或pip3 uninstall serial运行pip uninstall serial。对于Python 3。
  • 然后安装pyserial(如果尚未由安装)为python2.x运行pip install pyserial,为python3.x运行pip3 install pyserial

如果你像我一样无助,试试这个:

使用下面描述的方法列出"serial"(或任何您遇到问题的包)的所有子模块:列出属于python包的所有模块

在我的例子中,问题一个接一个地解决了。

…在我看来像个虫子…


这个问题是因为您的项目名为serial.py,导入的库名也为serial,请更改名称,仅此而已。


是的,这个话题有点老套了,但我想和那些无论如何都可能需要它的人分享我的解决方案。

如阿里所说,尝试使用终端上的以下内容定位程序:

1
2
 sudo python3
 import serial

print(serial.__file__)

CTRL+D #(to get out of python)

sudo python3->Paste/__init__.py

激活__init__.py会对你的程序说"好的,我要使用python3的serial"。我的问题是我的python3程序使用的是python2.7中的serial。

其他解决方案:删除其他python版本

资料来源:https://raspberrypi.stackexchange.com/questions/74742/python串行串行模块未找到错误/85930 85930

特里哈德


如果有循环依赖项,也可能发生此错误。检查你的进口,确保你没有任何周期。