我正在尝试使用运行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,重写代码,重新检查串行端口等。
事先谢谢!
- 你试过from serial import serial吗?
- 您是否卸载了模块或更改了Python版本?
- 回溯说…?
- 以下哪一行在交互式Python解释器中不起作用?
- @inspectorg4dget不,我对python版本没有做任何操作(除了重新安装pyserial)
- @inspectorg4dget我有同样的问题,我安装了sphynx(从那时起我就卸载了它,但没有解决问题)。如果您安装了一个模块,会出现什么故障?
- 另请参见stackoverflow.com/questions/19728535/serial-import-python
- 请修改正确的解决方案。以你为标志的那个人可能在事故中工作过,但既不是解决办法,也不是你想做的事情。
- 我删除了我的Pycahe文件夹的内容,它开始工作了。
我要为犯同样错误的人添加这个解决方案。
在大多数情况下:重命名项目文件'serial.py'并删除serial.pyc(如果存在),然后可以执行简单的'import serial',而不出现属性错误。
当python文件名为"something.py"时,导入"something"时会出现问题。
- 是的。。我把我的测试文件命名为"serial.py",所以import-serial就是导入本身。
- GAE用户的附加点-尝试刷新memcache。不知怎么的,在把一个模型移到另一个文件中之后,遇到了这个问题,并被困了好长时间。不确定是什么缓存导致了它,但它刷新修复了它。
- 哇,我从来没有想到过这个解决方案,非常感谢。只是坐在这里盯着看,实际上,我有一个artifact.pyc文件正在导入自己。
- 真是太好了!这个答案对我有很大帮助,谢谢!
- 这个答案应该是1,我也有同样的问题。另一个可能出现的错误是AttributeError: 'module' object has no attribute 'SerialException。
- 它真的帮助了我。非常感谢你。
- 另外,检查是否有一个名为Serial的(子)目录-)
- 坦克,我犯了这个错误
我不小心安装了'serial'(sudo python -m pip install serial)而不是'pyserial'(sudo python -m pip install pyserial),这导致了同样的错误。
如果前面提到的解决方案对您不起作用,请仔细检查是否安装了正确的库。
- 修复方法是卸载这两个,然后重新安装pyserial。
- 谢谢,卸载带有pip uninstall serial的serial修复了我的问题。然后安装pyserial pip install pyserial
- 希望更多的人看到这一点,也是我的错。谢谢你的帮助!
- 加上这个对我的覆盆子皮0也有效。Linux raspberrypi 4.14.62+ #1134 Tue Aug 14 16:58:07 BST 2018 armv6l GNU/Linux我之所以添加这个是因为我相信pyserial是一个较旧的模块。
您正在导入模块,而不是类。所以,你必须写:
1
| from serial import Serial |
您需要正确安装serial模块:pip install pyserial。
- 我在导入模块时多次遇到同样的问题。我不明白为什么它在某些情况下有效(例如,当你在系列网站上看到一些例子时)
- 我试过了。不工作。错误为"importError:无法导入名称序列号"
- 这看起来完全不对,对不起。首先,类是Serial而不是Serial,然后您不必导入类来使用它。module.class()应该工作得很好。最后,但并非最不重要的是,对于这里发生的事情没有真正的解释。
- 这并不能解决问题。
您安装了名为"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
特里哈德
如果有循环依赖项,也可能发生此错误。检查你的进口,确保你没有任何周期。