Pymodbus导入报错:找不到pymodbus.server.asynchronous模块
问题详情
- 设备:运行截至2023年2月9日最新Raspbian系统的Raspberry Pi 4
- Python版本:3.9.2
- 操作步骤:执行
pip3 install -U pymodbus[twisted]安装Pymodbus,安装过程中提示twisted不可用 - 报错情况:运行原有代码时,在
from pymodbus.server.asynchronous import StartTcpServer, StopServer代码行触发报错:ModuleNotFoundError: No module named 'pymodbus.server.asynchronous' - 背景信息:该代码在2021年Python 3.7环境下可正常运行,初步判断是Pymodbus版本兼容问题
- 完整报错回溯:
Traceback (most recent call last): File "/home/pi/mohm-lhf/Program2.py", line 11, in <module> from communication import MODBUS File "/usr/lib/python3/dist-packages/shiboken2/files.dir/shibokensupport/__feature__.py", line 142, in _import return original_import(name, *args, **kwargs) File "/home/pi/mohm-lhf/communication.py", line 8, in <module> import modbus_server as server File "/usr/lib/python3/dist-packages/shiboken2/files.dir/shibokensupport/__feature__.py", line 142, in _import return original_import(name, *args, **kwargs) File "/home/pi/mohm-lhf/modbus_server.py", line 13, in <module> from pymodbus.server.asynchronous import StartTcpServer, StopServer File "/usr/lib/python3/dist-packages/shiboken2/files.dir/shibokensupport/__feature__.py", line 142, in _import return original_import(name, *args, **kwargs) ModuleNotFoundError: No module named 'pymodbus.server.asynchronous'
原因分析
Pymodbus在v3.0版本后完成了架构重构,移除了旧的asynchronous模块,异步服务器相关的API被迁移到pymodbus.server下的不同子模块中;同时Twisted后端的支持方式也发生了变更,导致旧代码的导入路径完全失效。
解决方法
方法1:降级到兼容旧代码的Pymodbus版本
安装v2.x系列的稳定版本(比如v2.5.3),该版本保留了原有异步模块的结构:
- 先卸载当前安装的新版本:
pip3 uninstall -y pymodbus
- 安装指定版本及Twisted依赖:
pip3 install pymodbus==2.5.3 twisted
方法2:修改代码适配Pymodbus v3.x版本
如果想要使用最新版本,需要调整代码中的导入和服务器启动逻辑:
- 替换导入语句:
原代码导入:
from pymodbus.server.asynchronous import StartTcpServer, StopServer
替换为(以asyncio后端为例,若需使用Twisted后端需单独安装对应依赖):
from pymodbus.server import StartAsyncTcpServer from pymodbus.server.async_io import ModbusServerStop
- 调整服务器启动的参数和逻辑,可参考Pymodbus内置的异步服务器示例代码进行适配。
内容的提问来源于stack exchange,提问作者Clóvis Fritzen
相关产品推荐
相关产品推荐

