Ubuntu运行Python脚本报ImportError No module named pyserial错误
问题根因
核心原因是pyserial的PyPI发行包名和实际可导入的模块名不一致,属于Python生态的常规情况,你的安装操作没有问题。
- 你通过pip、apt安装时填写的
pyserial是这个包在软件源里的发行名,但包安装完成后,解释器能识别的导入模块名是serial,不存在名为pyserial的可导入模块,因此无论安装哪个版本,执行import pyserial都会触发找不到模块的报错。 - 你在
pyserial-3.5.dist-info目录下看不到.py文件是正常现象:这个目录仅存储包的版本、依赖、安装记录等元数据,实际的功能代码存放在和它同级的serial目录中,回到site-packages根目录即可找到对应源码文件,不存在安装丢文件的问题。 - 你在Python2.7、3.8交互环境中执行
import serial无报错,已经直接证明两个环境下的pyserial都安装成功,问题出在脚本本身的错误导入写法,和安装过程、包版本无关。
解决步骤
- 修正脚本中的错误导入语句
把脚本里所有import pyserial、import pyserial as serial、from pyserial import xxx这类错误写法全部替换为正确的模块导入:
如果需要引入模块下的特定类/方法,比如串口实例类,写法为import serialfrom serial import Serial,严格基于serial作为模块名引用即可。 - 确认脚本运行时匹配正确的Python2解释器
新部署的Ubuntu默认存在多版本Python共存的情况,为避免调用到未装对应包的解释器,运行脚本前先执行命令确认Python2路径:
拿到路径后用全路径调用脚本,示例:which python2/usr/bin/python2 your_target_script.py - 安装有效性校验(可选)
进入Python2交互终端执行以下代码,确认包功能正常:
正常输出版本号(如3.5)即代表环境配置完全正常,运行修正导入后的脚本即可。import serial print(serial.__version__)
补充说明
Python生态中大量包都存在发行名和导入名不一致的情况,比如发行名pillow对应导入名PIL、发行名python-dateutil对应导入名dateutil,遇到导入报错时先在对应Python环境的交互终端测试导入,不要想当然按照发行名写导入语句,也不要盲目重装包浪费时间。
内容的提问来源于stack exchange,提问作者jfwork
相关产品推荐
相关产品推荐

