Python模块未命名为serial。

7

我遇到了一个关于Python程序的问题。我写了一个程序,从Arduino获取数据(温度),并将其存储到我的树莓派SQLite数据库中。但是在第4行(import serial)时,它给出了一个错误:“ImportError: No module named serial”。我使用的是Python3,并已经更新了Pyserial。由于我刚接触Python,所以可能会犯一些错误...

 #!/ussr/bin/python
 # -*- coding: utf-8 -*-

 import serial
 import datetime
 import sqlite3 as lite
 import sys
 import time

 ser = serial.Serial('/dev/ttyACM1', 9600, timeout=1)
 ser.open()

 count = 0

 con = lite.connect('realtime_data.db')

 try:
       while 1:
         indata = ser.readline()
         current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
         count = count + 1

         print (count)

         with con:
           cur = con.cursor()
           cur.execute("INSERT INTO Temperatures VALUES( ?, ?, ? )", (count, current_time, indata))
           if count > 100:
             cur.execute("DELETE FROM Temperatures")
             count = 0

        # time.sleep(3) #upload to database every 5 seconds

 except KeyboardInterrupt:
       ser.close()

我没有使用过Arduino或树莓派进行编程,但在安装Python模块时,我有时会遇到一个普遍的问题。有时候,一些模块被安装到了Python2.x而不是3.x。您可以通过打开交互式shell并尝试导入该模块来验证它们安装的版本。 - Chaitanya Nettem
由于我们不知道您的Python 3位于何处,因此几乎不可能为您提供有意义的建议。您面临这个问题的原因可能是pip安装了适用于Python 2而非3的软件包。我的建议是简单地使用Python 2,两者之间没有太大区别。 - Games Brainiac
是的,你说得对。我刚刚检查了一下,pip是为Python2安装的该软件包。有没有办法将其安装到Python3?我的意思是这是我的第一个Python程序,我并不是很擅长它。两者之间有什么区别?我花了一段时间来编写这个程序... - AlbertSm
2个回答

17

这里有一个关于 如何安装Python 3中的pip? 的问题。之后,您可以使用 pip 安装与 python-3.x 兼容的 pyserial,如下所示:

$ sudo pip3 install pyserial

这里有一篇doc,介绍了如何使用与 Python 3.x 兼容的源代码安装 pyserial

另外,如果你的平台上同时安装了 Python 2.x 和 Python 3.x(例如 Arch Linux),在安装某些包时,你需要小心选择与哪个 Python 版本兼容的包,并使用 pip2pip3 获取和安装这些包。


谢谢帮忙。它起作用了。我之前已经卸载了Python2,但为了在Python3上安装pip,我使用了sudo apt-get install python3-pip,然后sudo pip-3.2 install pyserial。问题解决了,但现在我面临另一个问题。它说端口已经打开。 - AlbertSm
@AlbertSm,使用shell命令netstat -npl查看哪个进程正在使用该端口,由您决定是否终止它。 - flyer
1
在代码中,我试图打开端口,但我不知道Python3已经为你做了这件事。那就是错误所在。现在它可以工作了。 - AlbertSm
1
只是补充一下,如果找不到pip3命令,请使用此命令“ls /usr/bin/pip*”获取其替代/替换。对于我的情况,它是pip-3.2。 - Joyce

1
如果您保存的文件名与模块名称相同,则会出现错误。 例如,如果您的文件名为“serial.py”,并且您导入了“serial”,则它将首先在“serial.py”中检查您声明的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接