155

我正在尝试在运行 Debian 的 Raspberry Pi 上使用 Python 2.6 访问串行端口。我的脚本名为serial.py尝试导入 pySerial:

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

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

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

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

奇怪的是,它曾经在大约几个小时前工作过。

可能是什么问题呢?我试图解决这个问题一段时间,再次安装 pySerial,重写我的代码,仔细检查串口等。

4

8 回答 8

212

我正在为与我犯相同错误的人添加此解决方案。

在大多数情况下:重命名您的项目文件“serial.py”并删除serial.pyc(如果存在),那么您可以执行简单的“导入序列”而不会出现属性错误。

当您的 python 文件名为“something.py”时,当您导入“某物”时会出现问题。

于 2012-08-08T21:19:10.737 回答
175

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

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

于 2017-10-30T13:27:01.040 回答
128

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

from serial import Serial

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

于 2012-07-09T22:21:46.857 回答
43

您安装了名为“ serial的错误包。

  • pip uninstall serial为 python 2.x 或pip3 uninstall serial python 3.x运行
  • 如果尚未安装pyserialpip install pyserial ,则通过运行python 2.x 或pip3 install pyserialpython 3.x来安装。
于 2018-03-22T04:35:30.267 回答
9

这个问题是因为你的项目被命名为 serial.py 并且导入的库也被命名为 serial ,更改名称就可以了。

于 2017-03-05T17:06:37.047 回答
3

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

使用此处描述的方法列出“串行”(或您遇到问题的任何包)的所有子模块: 列出作为 python 包一部分的所有模块

就我而言,问题一个接一个地解决了。

...在我看来像一个错误...

于 2014-11-01T15:16:32.100 回答
1

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

于 2016-10-13T18:57:20.833 回答
1

是的,这个话题有点老了,但我想为那些可能需要它的人分享对我有用的解决方案

正如阿里所说,尝试使用终端中的以下内容找到您的程序:

 sudo python3
 import serial

print(serial.__file__) --> 复制

CTRL+D #(to get out of python)

sudo python3-->粘贴/__init__.py

激活__init__.py将对您的程序说“好的,我将使用来自 python3 的串行”。我的问题是我的 python3 程序使用的是来自 python 2.7 的 Serial

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

资料来源: https ://raspberrypi.stackexchange.com/questions/74742/python-serial-serial-module-not-found-error/85930#85930

努力

于 2018-07-12T08:41:40.237 回答