Python 3.9/3.10环境下TCLab设备连接故障求助
问题描述
系统环境
- OS:
macOS 11.7.1 (Big Sur)
故障详情
数月前购买的TCLab套件此前测试正常,近期使用APMonitor课程脚本时出现故障。原使用Python 3.9,后安装Python 3.10,运行测试脚本show_T1.py时:
- Python 3.10中出现
ImportError:无法从collections导入Iterable,原因是该类已移至collections.abc,修改脚本后导入问题解决,但出现新错误:AttributeError: module 'serial' has no attribute 'Serial',最终导致连接失败; - 切换回Python 3.9无导入问题,但同样出现上述serial模块错误及连接失败;
拔掉USB线缆时系统能正确提示无Arduino设备,说明硬件连接正常。
已安装模块列表
Python 3.10:
$ pip list Package Version ------------------ --------- blessed 1.19.1 bpython 0.23 certifi 2022.9.24 charset-normalizer 2.1.1 contourpy 1.0.6 curtsies 0.4.1 cwcwidth 0.1.8 cycler 0.11.0 fonttools 4.38.0 future 0.18.2 greenlet 2.0.1 idna 3.4 iso8601 1.1.0 kiwisolver 1.4.4 matplotlib 3.6.2 numpy 1.23.5 packaging 21.3 Pillow 9.3.0 pip 22.3.1 Pygments 2.13.0 pyparsing 3.0.9 pyserial 3.5 python-dateutil 2.8.2 pyxdg 0.28 PyYAML 6.0 requests 2.28.1 scipy 1.9.3 serial 0.0.97 setuptools 65.4.1 six 1.16.0 tclab 0.4.9 urllib3 1.26.13 wcwidth 0.2.5
Python 3.9:
$ pip list Package Version ------------------ --------- blessed 1.19.1 bpython 0.23 certifi 2022.9.24 charset-normalizer 2.1.1 contourpy 1.0.6 curtsies 0.4.1 cwcwidth 0.1.8 cycler 0.11.0 docopt 0.6.2 fonttools 4.38.0 future 0.18.2 greenlet 2.0.1 idna 3.4 iso8601 1.1.0 kiwisolver 1.4.4 matplotlib 3.6.2 numpy 1.23.5 packaging 21.3 Pillow 9.3.0 pip 22.3.1 pipreqs 0.4.11 Pygments 2.13.0 pyparsing 3.0.9 pyserial 3.5 python-dateutil 2.8.2 pyxdg 0.28 PyYAML 6.0 requests 2.28.1 scipy 1.9.3 serial 0.0.97 setuptools 65.4.1 six 1.16.0 tclab 0.4.9 urllib3 1.26.13 wcwidth 0.2.5 yarg 0.1.9
解决方案
1. 解决serial与pyserial模块冲突
从模块列表可看到,你同时安装了serial(0.0.97)和pyserial(3.5)。serial是废弃包,会覆盖pyserial的导入路径——真正提供Serial类的是pyserial,serial包无该属性,这是报错的核心原因。
操作步骤:
- 卸载无用的
serial包:- Python 3.10:
python3.10 -m pip uninstall serial -y - Python 3.9:
python3.9 -m pip uninstall serial -y
- Python 3.10:
- 重新安装
pyserial确保正常:# 替换x为对应版本号(9或10) python3.x -m pip install --force-reinstall pyserial==3.5
2. Python 3.10的Iterable兼容处理
若后续其他脚本出现相同导入问题,可修改导入代码以兼容多版本:
- 原代码:
from collections import Iterable - 修改为:
try: from collections.abc import Iterable except ImportError: from collections import Iterable
3. 后续验证
完成上述操作后,重新运行show_T1.py。若仍有问题,可尝试:
- 重启电脑和TCLab设备;
- 更换USB线缆或端口测试;
- 确认TCLab的Arduino固件为最新版本。
内容的提问来源于stack exchange,提问作者MERM
相关产品推荐
相关产品推荐

